ProcessVulnerabilityMailbox.php
1 <?php 2 3 namespace App\Jobs; 4 5 use App\Models\VulnerabilityMail; 6 use Illuminate\Bus\Queueable; 7 use Illuminate\Contracts\Queue\ShouldBeUnique; 8 use Illuminate\Contracts\Queue\ShouldQueue; 9 use Illuminate\Foundation\Bus\Dispatchable; 10 use Illuminate\Queue\InteractsWithQueue; 11 use Illuminate\Queue\SerializesModels; 12 use Webklex\IMAP\Facades\Client; 13 use Webklex\PHPIMAP\Support\MessageCollection; 14 15 class ProcessVulnerabilityMailbox implements ShouldQueue, ShouldBeUnique 16 { 17 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 18 19 public MessageCollection $messages; 20 21 /** 22 * Create a new job instance. 23 * 24 * @return void 25 */ 26 public function __construct() 27 { 28 // 29 } 30 31 public function fetchMessages() 32 { 33 $client = Client::account('mailbox'); 34 $client->connect(); 35 36 $this->messages = $client->getFolderByPath('INBOX') 37 ->messages() 38 ->where(['subject' => 'Vulnerability']) 39 ->unseen() 40 ->get(); 41 } 42 43 public function saveMail($message) 44 { 45 $mail = new VulnerabilityMail; 46 $mail->from = $message->getFrom()[0]->mail; 47 $mail->subject = $message->getSubject(); 48 $mail->body = $message->getTextBody(); 49 $mail->save(); 50 51 if (config('app.env') !== 'testing') { 52 $message->setFlag('Seen'); 53 } 54 } 55 56 /** 57 * Execute the job. 58 * 59 * @return void 60 */ 61 public function handle() 62 { 63 $this->fetchMessages(); 64 65 foreach ($this->messages as $message) { 66 $this->saveMail($message); 67 } 68 } 69 }