由Sendmail发送的电子邮件有不寻常的超时

我有一个Sendmail的Ubuntu机器。

每当我发出一个PHP邮件()函数,电子邮件即时交付(收到我的收件箱在其他域),但PHP进程等待,等待很长时间约1分钟才返回true。

这是非常烦人的,因为浏览器似乎挂起。

什么可能是错的?

做networking请求时首先检查长时间延迟是dns问题。 在你的机器上尝试一些dns查找,例如nslookup otherserver.foo.com 。 在远程机器上,尝试查找本地计算机。 尝试做DNS查询的IP地址,看看反向查找是否有问题。

如果您直接在机器上发送邮件,这种延迟是否会发生,即:

 mail -s "test message" [email protected] </dev/null 

我不知道PHP邮件()函数如何工作。 你需要弄清楚它是如何在机器上调用sendmail的 – 是否有这样的事情发生,导致sendmail进程发送邮件,但随后坐在那里很长一段时间什么也不干。

在你的机器上检查/var/log/sendmail/var/log/messages以查看/var/log/messages是否有任何有趣的sendmail消息。

它是否真的安装了sendmail ? 我以为Ubuntu默认安装了postfix ? 在任何情况下, sendmail本身都很难configuration,甚至更难debugging的问题。 所以我build议切换到另一个MTA。 试图发送邮件的程序不会注意到区别。

其次,PHP的mail()函数是非常挑剔的,并试图为你做一些事情。 如果你没有提供足够的头部参数,尤其如此,因为它将一些猜测留给了MTA。 我build议你findPHPMailer或类似的。 这有一个更好的API,让你更多地控制发生的事情,并build立比mail()更多的合理的默认值。