我有一台装有 Sendmail 的 Ubuntu 机器。
每当我发出 PHP mail() 函数时,电子邮件就会立即送达(在其他域的收件箱中收到),但 PHP 进程会等待很长时间(大约 1 分钟)才返回 true。
这非常烦人,因为会导致浏览器挂起。
可能出了什么问题?
答案1
执行网络请求时,首先要检查是否存在长时间延迟,即 DNS 问题。例如,在您的机器上尝试进行一些 DNS 查找nslookup otherserver.foo.com
。在远程机器上,尝试对本地机器进行相同的查找。尝试对 IP 地址进行 DNS 查找,看看反向查找是否有问题。
如果您直接在机器上发送邮件,是否会发生这种延迟,即:
mail -s "test message" [email protected] </dev/null
我不知道 php mail() 函数是如何工作的。您需要弄清楚它究竟是如何在机器上调用 sendmail 的 - 它执行该操作的方式是否会导致 sendmail 进程发送邮件,但之后很长时间没有执行任何操作?
检查您的机器/var/log/sendmail
,/var/log/messages
查看日志中是否有任何有趣的 sendmail 消息。
答案2
你真的sendmail
安装了它吗?我以为 Ubuntu 是postfix
默认安装的?无论如何,sendmail
它本身很难配置,调试问题就更难了。所以我建议切换到另一个 MTA。尝试发送邮件的程序不会注意到差异。
其次,PHP 的mail()
函数非常挑剔,会尝试为您做一些事情。如果您没有提供足够的标头参数,情况尤其如此,因为这会将一些猜测留给 MTA。我建议您使用 findPHPMailer
或类似工具。它具有更好的 API,可让您更好地控制正在发生的事情,并且设置了比它更合理的默认值mail()
。