/ app / Jobs / ProcessVulnerabilityMailbox.php
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  }