我使用SwiftMailer从Gearman Worker进程发送电子邮件。我正在使用Swift_SmtpTransport类发送电子邮件。

问题是,如果此工作进程保持空闲一段时间,则SwiftMailer smtp连接将超时。现在,当下一个作业到达时,由于连接已超时,SwiftMailer无法发送电子邮件。

理想情况下,我想在每项工作之后关闭smtp连接。我无法在专门执行此操作的类中找到api。 unset()对象也不起作用,因为这是静态类。

最佳答案

我循环发送邮件,当时我正在捕获Swift_TransportException并创建了Swift_Mailer的新实例,但这不是正确的解决方法:问题在于传输方式,而不是邮件程序。解决方案是对Swift_SmtpTransport::stop()发出显式调用:

foreach($recipients as $to => $body){
    try{
        $message->setTo($to);
        $message->setBody(body);
        $mailer->send($message);
    }catch(Swift_TransportException $e){
        $mailer->getTransport()->stop();
        sleep(10); // Just in case ;-)
    }
}

这样,Swift检测到邮件程序已停止并自动启动,因此它可以从通信错误中正确恢复。

关于php - 如何在SwiftMailer中关闭Smtp连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13257114/

10-10 04:18