php - 如何在 SwiftMailer 中关闭 Smtp 连接

标签 php email smtp swiftmailer worker

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

相关文章:

PHP 不将数据保存到附属脚本中的数据库

php - 在一封电子邮件中发送多行

objective-c - 如何使用 objective C/cocoa 以编程方式发送电子邮件

smtp - Postfix - 必须首先发出 STARTTLS 命令

php - 如何使用 jointable 进行 dql 查询?

php - 如何在 PHP 7.0 Ubuntu 18.10 中启用 SoapClient

PHP Mailer 在 Linux 中发送电子邮件太慢

java - 使用 JavaMail 发送电子邮件,由于 "Connection refused"而收到 "too many connections"- 为什么?

javascript - 如何使用 JavaScript 将数据插入 Yii 框架 2.0 CKEditor 扩展?

python - 通过电子邮件向 AT&T 彩信发送文件