Laravel 4.2 记录来自 Swift Mailer 的电子邮件
Laravel 4.2 Loging Mails from Swift Mailer
在我的项目中,我需要记录从应用程序发送的每封邮件。
Mail::queue('email.template', $vars, function($message) {
$message->to('someone', 'Her name')->subject("<3");
LogModel::log($message);
});
在 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();
}
所有getter,这里return Null
.
注意:我所有的消息都在这里签名。
如何访问这些值或记录邮件的最佳方式是什么?
我做了更多研究,发现这种非常灵活的技术可以记录所有邮件。
即使使用 sync
队列驱动程序,也无法通过 getter 在该级别读取使用队列发送的邮件的值,因为事情是在延迟模式下准备的。
做到这一点的关键是事件订阅者。 Laravel 的默认邮件程序在发送邮件之前触发 mailer.sending
事件。
如果您使用某些第三方服务提供商注册邮件程序,请确保邮件程序构造函数将第三个参数作为 $app['events']
,例如
$mailer = new Mailer($app['view'], $app['swift.mailer'], $app['events']);
在 (app/library)
中创建事件订阅者 class
class MyEventHandler{
public function onMailSent($message) {
LogModel::log($message);
}
public function subscribe($events) {
$events->listen('mailer.sending', 'MyEventHandler@onMailSent');
}
}
正在将此 class 注册为 global.php
中的事件订阅者
Event::subscribe(new MyEventHandler);
最后 LogModel 为
public static function log($msg) {
// if $msg is instance of Illuminate\Mail\Message
$msg = $msg->getSwiftMessage();
$log = new self;
$to = array_keys($msg->getTo());
$log->to = array_shift($to);
$log->subject = $msg->getSubject();
$log->cc = $msg->getCc();
$log->bcc = $msg->getBcc();
$log->body = $msg->getBody();
$log->headers = serialize($msg->getHeaders());
$log->save();
}
在我的项目中,我需要记录从应用程序发送的每封邮件。
Mail::queue('email.template', $vars, function($message) {
$message->to('someone', 'Her name')->subject("<3");
LogModel::log($message);
});
在 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();
}
所有getter,这里return Null
.
注意:我所有的消息都在这里签名。
如何访问这些值或记录邮件的最佳方式是什么?
我做了更多研究,发现这种非常灵活的技术可以记录所有邮件。
即使使用 sync
队列驱动程序,也无法通过 getter 在该级别读取使用队列发送的邮件的值,因为事情是在延迟模式下准备的。
做到这一点的关键是事件订阅者。 Laravel 的默认邮件程序在发送邮件之前触发 mailer.sending
事件。
如果您使用某些第三方服务提供商注册邮件程序,请确保邮件程序构造函数将第三个参数作为 $app['events']
,例如
$mailer = new Mailer($app['view'], $app['swift.mailer'], $app['events']);
在 (app/library)
中创建事件订阅者 classclass MyEventHandler{
public function onMailSent($message) {
LogModel::log($message);
}
public function subscribe($events) {
$events->listen('mailer.sending', 'MyEventHandler@onMailSent');
}
}
正在将此 class 注册为 global.php
中的事件订阅者Event::subscribe(new MyEventHandler);
最后 LogModel 为
public static function log($msg) {
// if $msg is instance of Illuminate\Mail\Message
$msg = $msg->getSwiftMessage();
$log = new self;
$to = array_keys($msg->getTo());
$log->to = array_shift($to);
$log->subject = $msg->getSubject();
$log->cc = $msg->getCc();
$log->bcc = $msg->getBcc();
$log->body = $msg->getBody();
$log->headers = serialize($msg->getHeaders());
$log->save();
}