Как с Symfony2 и Swiftmailer прослушивать исключения, возникающие при фактической отправке буферных писем?

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

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

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


person Dan Blows    schedule 16.01.2014    source источник


Ответы (1)


Вам следует взглянуть на плагины Swiftmailer. Существует множество включенных в swift .

Возможно, плагин регистратора или достаточно плагина reporter для тебя.

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

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

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

Затем вы можете зарегистрировать свой плагин следующим образом:

$mailer->registerPlugin(new CustomPlugin());
person Jens    schedule 09.09.2016