php - SwiftMailer 的 SMTP 超时设置与什么有关?
问题描述
使用 SwiftMailer 时Swift_SmtpTransport
有一个timeout
设置。
https://symfony.com/doc/current/reference/configuration/swiftmailer.html#timeout
这是指什么?它只是用于登录服务器的超时时间,还是用于登录和发送消息的完整操作?
我遇到了这个问题,因为我注意到如果您使用无效的 SMTP 凭据,脚本将需要 30 秒才能继续执行——这对于公共网站来说太长了。在无效凭据(例如,它们被更改)或服务器关闭的情况下,使用setTimeout(5)
似乎更容易接受。
如果这只是登录到 SMTP 服务器,我认为 5 秒绰绰有余。如果这也是发送消息,我仍然认为这对于发送少量电子邮件来说是可以的。我已经做了一些测试电子邮件,到目前为止看起来还不错,但想在使用它之前检查一下。
解决方案
在 PHP 中使用流套接字时,有两个超时:
fread 文档说:
数据包可用或发生套接字超时(对于网络流)
似乎这个超时参数用于 Swiftmailer 中的三个任务:
但是,如果您不想在向用户发送响应之前等待邮件发送完毕,您应该查看messenger 组件。您将拥有两个异步进程,而不是只有一个进程。您的控制器将不再等待邮件发送,它只会向信使组件发送一条消息(“请向此新用户发送注册邮件”)。信使组件将启动一些操作来发送此邮件。状态字段通常用于了解邮件是否成功发送。Fabien Patencier 写了一本书“Symfony the Fast Track”,其中包含一个有用且完整的示例。
推荐阅读
- botframework - 无法在 Bot Framework Emulator 中建立隧道套接字
- angular - 无法使用 Angular 选择所有复选框
- javascript - 努力在 D3 中使用贝塞尔曲线实现连接器路径
- curl - 使用 CURL 对 C 代码进行 SSL 握手的问题
- html2pdf - html2pdf:溢出:隐藏似乎不起作用
- java - 在 Spring Boot 中使用参数化构造函数实例化 Spring Bean
- android - Android Studio 如何在更改片段时阻止我的计步器值重置?
- python - 如何使用列表理解来查找所有 Pandas 数据帧共有的列
- mysql - 无效查询:postfixadmin 中“created”的默认值无效
- reactjs - 如何根据另一个对象动态键入数据集并将其绑定到可能出现的任意键?