我使用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/