Laravel 4.2从Swift Mailer记录邮件 [英] Laravel 4.2 Loging Mails from Swift Mailer
问题描述
在我的项目中,我需要记录我从应用程序发送的每封邮件.
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);
});
以及在LogModel中
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();
}
所有吸气剂,在这里返回Null
.
注意:我所有的消息都在这里签名.
All getters, here return Null
.
Note: All of my messages are signed here.
如何访问这些值或记录邮件的最佳方法是什么?
推荐答案
我做了一些研究,发现这种非常灵活的技术可以记录所有邮件.
I did a little more research and find this very flexible technique to log all mails.
即使使用sync
队列驱动程序,也要以延迟模式进行准备,所以无法通过getter在该级别读取使用队列发送的邮件的值.
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.
要做到这一点的关键是事件订阅者.在发送邮件之前,Laravel的默认邮件程序会触发mailer.sending
事件.
The key to do that is Event subscriber. Laravel's default mailer triggers mailer.sending
event just before sending the message.
如果您正在使用某些第三方服务提供商来注册邮件程序,请确保邮件程序构造函数将第三个参数作为$app['events']
例如
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.
$mailer = new Mailer($app['view'], $app['swift.mailer'], $app['events']);
在(应用程序/库)中创建事件订阅者类
Creating an event subscriber class in (app/library)
class MyEventHandler{
public function onMailSent($message) {
LogModel::log($message);
}
public function subscribe($events) {
$events->listen('mailer.sending', 'MyEventHandler@onMailSent');
}
}
在global.php中将此类注册为事件订阅者
Registering this class as event subscriber in global.php
Event::subscribe(new MyEventHandler);
最后是LogModel作为
And finally LogModel as
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();
}
这篇关于Laravel 4.2从Swift Mailer记录邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!