使用Symfony2和Swiftmailer,如何监听实际发送假脱机电子邮件时抛出的异常?

时间:2014-01-16 19:29:15

标签: symfony swiftmailer

我正在使用Swiftmailer和Symfony发送电子邮件。我的配置设置为假脱机电子邮件,我正在使用第三方SMTP服务器(MailJet)。一切正常。 但如果我给Swiftmailer一个错误的SMTP服务器密码,它就会无声地失败。

当我关闭假脱机以便立即发送时,我看到Swiftmailer正在抛出一个TransportException。但是,当它被假脱机时,在Symfony的kernel.terminate事件期间会抛出此异常,因此它会被忽略。 Symfony或nginx的日志中没有任何内容,所以我实际上并不知道是否抛出异常。

那么,如果在kernel.terminate事件期间抛出SMTP服务器,我怎么能检测到连接到SMTP服务器的失败,以便我可以在Monolog中登录?

1 个答案:

答案 0 :(得分:2)

你应该看看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());