In my project I need to log each mail I send from my application.
Mail::queue('email.template', $vars, function($message) {
$message->to('someone', 'Her name')->subject("<3");
LogModel::log($message);
});
and in LogModel
public static function log(Message $message) {
$msg = $message->getSwiftMessage();
$log = new self;
$log->to = $msg->getTo();
$log->subject = $msg->getSubject();
$log->cc = $msg->getCc();
$log->bcc = $msg->getBcc();
$log->body = $msg->getBody();
$log->headers = serialize($msg->getHeadres());
$log->save();
}
All getters, here return Null
.
Note: All of my messages are signed here.
How can I access these values or what is the best way to log mails?
I did a little more research and find this very flexible technique to log all mails.
Mail sent using queue can't be read for values via getter at that level as things are prepared in deferred mode even with
sync
queue driver.The key to do that is Event subscriber. Laravel's default mailer triggers
mailer.sending
event just before sending the message.If you are using some third party service provider to register mailer then make sure Mailer constructor is getting third parameter as
$app['events']
e.g.Creating an event subscriber class in (app/library)
}
Registering this class as event subscriber in global.php
And finally LogModel as