我使用 SwiftMailer 从 gearman 工作进程发送电子邮件。我正在使用 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/