/** * 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(); } }