2014-01-16 1 views
3

Я использую Swiftmailer и Symfony для отправки электронной почты. Моя конфигурация настроена на буферизацию электронной почты, и я использую сторонний SMTP-сервер (MailJet). Все работает отлично. Но если я дам Swiftmailer неправильный пароль для SMTP-сервера, он просто терпит неудачу.С Symfony2 и Swiftmailer, как я могу слушать исключения, возникающие при отправке буферизованных писем?

Когда я выключаю буферизацию так, чтобы она была отправлена ​​немедленно, я вижу, что Swiftmailer выбрасывает TransportException. Однако, когда он буферизуется, это исключение выбрасывается во время события kernel.terminate Symfony, поэтому его просто игнорируют. В журналах ни Symfony, ни nginx ничего нет, поэтому я не знаю, выбрано ли исключение.

Так как я могу обнаружить отказ подключиться к SMTP-серверу, если он был сброшен во время события kernel.terminate, чтобы я мог его зарегистрировать в Monolog?

ответ

1

Вы должны взглянуть на Swiftmailer plugins. Есть куча, которая приходит included with swift.

Возможно, вам нужен плагин logger или плагин reporter.

Если нет, вы можете написать собственный прослушиватель плагинов/событий. Вы можете посмотреть, как работает плагин Logger, он прослушивает исключения, реализуя transport exception listener.

Что-то вроде этого:

class CustomPlugin implements Swift_Events_TransportExceptionListener 
{ 
    public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) 
    { 
     $e = $evt->getException(); 
     // do something ... 
    } 
} 

Затем вы можете зарегистрировать свой плагин, как это:

$mailer->registerPlugin(new CustomPlugin());