Exemplo n.º 1
0
 /**
  * Inject the tracking code into the message
  */
 public function beforeSendPerformed(\Swift_Events_SendEvent $event)
 {
     $message = $event->getMessage();
     foreach ($message->getTo() as $to_email => $to_name) {
         foreach ($message->getFrom() as $from_email => $from_name) {
             $headers = $message->getHeaders();
             $hash = str_random(32);
             $headers->addTextHeader('X-Mailer-Hash', $hash);
             $subject = $message->getSubject();
             $original_content = $message->getBody();
             if ($message->getContentType() === 'text/html' || $message->getContentType() === 'multipart/alternative' && $message->getBody()) {
                 $message->setBody($this->addTrackers($message->getBody(), $hash));
             }
             foreach ($message->getChildren() as $part) {
                 if (strpos($part->getContentType(), 'text/html') === 0) {
                     $converter->setHTML($part->getBody());
                     $part->setBody($this->addTrackers($message->getBody(), $hash));
                 }
             }
             SentEmail::create(['hash' => $hash, 'headers' => $headers->toString(), 'sender' => $from_name . " <" . $from_email . ">", 'recipient' => $to_name . ' <' . $to_email . '>', 'subject' => $subject, 'content' => $original_content, 'opens' => 0, 'clicks' => 0, 'message_id' => $message->getId(), 'meta' => []]);
         }
     }
     // Purge old records
     if (config('mail-tracker.expire-days') > 0) {
         $emails = SentEmail::where('created_at', '<', \Carbon\Carbon::now()->subDays(config('mail-tracker.expire-days')))->select('id')->get();
         SentEmailUrlClicked::whereIn('sent_email_id', $emails->pluck('id'))->delete();
         SentEmail::whereIn('id', $emails->pluck('id'))->delete();
     }
 }