我正在使用 Swiftmailer 和 Symfony 发送电子邮件。我的配置设置为后台处理电子邮件,我使用的是第三方 SMTP 服务器 (MailJet)。一切正常。 但是如果我给 Swiftmailer 一个错误的 SMTP 服务器密码,它只会默默地失败。

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

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

最佳答案

你应该看看 Swiftmailer plugins 。有一堆来自 included with swift

也许 logger 插件或 reporter 插件对你来说就足够了。

如果没有,您可以编写自己的插件/事件监听器。您可以查看记录器插件的工作原理,它通过实现 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());

关于symfony - 使用 Symfony2 和 Swiftmailer,当实际发送假脱机电子邮件时,我如何监听抛出的异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21171080/

10-11 20:40