2015-12-09 1 views
0

В моем проекте мне нужно регистрировать каждое письмо, которое я отправляю из своего приложения.Laravel 4.2 Отправка писем от 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(); 
} 

Все геттеров, здесь возвращают Null.
Примечание: все мои сообщения подписаны здесь.

Как я могу получить доступ к этим значениям или как лучше всего регистрировать почту?

ответ

1

Я сделал немного больше исследований и нашел этот очень гибкий метод для регистрации всех писем.

Почтовый адрес, отправленный с использованием очереди, не может быть прочитан для значений через getter на этом уровне, поскольку все готово в отложенном режиме даже с sync драйвером очереди.

Ключом для этого является подписчик на события. По умолчанию почтовая программа Laravel запускает событие mailer.sending перед отправкой сообщения.

Если вы используете сторонний поставщик услуг для регистрации почтовой программы, убедитесь, что конструктор Mailer получает третий параметр как $app['events'], например.

$mailer = new Mailer($app['view'], $app['swift.mailer'], $app['events']); 

Создание класса абонентского события в (приложении/библиотеке)

class MyEventHandler{ 
    public function onMailSent($message) { 
    LogModel::log($message); 
    } 

    public function subscribe($events) { 
    $events->listen('mailer.sending', '[email protected]'); 
    } 

}

Регистрация этого класса в качестве подписчика событий в 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(); 
}