php - 通过 mail() Apache+PHP5.3+sendmail 发送电子邮件时延迟 20 秒?

标签 php apache email centos sendmail

今天我发现我的网站联系表单在我的 Godaddy Centos VPS 服务器上发送一封电子邮件大约需要 20 秒。

我调查了这个问题,发现源头是由 PHP mail() 函数引起的。当我在网站的联系页面上键入消息并单击发送按钮时,页面加载完成需要大约 20 秒。

使用以下 PHP 代码创建一个 test.php 文件来测试邮件:

<?php

mail("myemail@mydomain.com", "Test", "Test");

?>

我在服务器上运行了命令:php test.php

我检查了 /var/log/maillog,似乎电子邮件已立即发送,没有任何延迟。

20 秒的延迟只发生在我通过我的网站执行我的代码时。我假设这与 Apache 用户有关,因为使用 root 用户的命令行可以毫不延迟地发送电子邮件。

这是我使用 root 用户通过控制台发送电子邮件时的邮件日志:

Apr 10 14:57:04 ip-103-1-173-250 sendmail[27681]: r3ALv4i3027681: from=root, size=174, class=0, nrcpts=1, msgid=<201304102157.r3ALv4i3027681@ip-103-1-173-250.ip.secureserver.net>, relay=root@localhost
Apr 10 14:57:05 ip-103-1-173-250 sendmail[27681]: r3ALv4i3027681: to=john23157@gmail.com, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30174, relay=myserver, dsn=2.0.0, stat=Sent (Accepted message qp 20459 bytes 684)

出于安全原因,我将这篇文章中的 relay= 值替换为 myserver

从上面的邮件日志可以看出,邮件是即时发送的,我确实收到了邮件。

这是我通过我的网站联系表发送邮件时的日志:

Apr 10 14:54:22 myhostname sendmail[27655]: r3ALsMjV027655: from=support@mydomain.com, size=940, class=0, nrcpts=1, msgid=<d946feca6d6640910e2db02d541aa704@mydomain.com>, relay=apache@localhost

Apr 10 14:57:56 myhostname sendmail[27655]: r3ALsMjV027655: to=john23157@gmail.com, ctladdr=support@mydomain.com (48/48), delay=00:03:34, xdelay=00:03:34, mailer=relay, pri=30940, relay=myserver, dsn=2.0.0, stat=Sent (Accepted message qp 21186 bytes 1297)

上面的邮件日志显示延迟了 3 分半钟。

我不知道是什么导致了通过 Apache 发送时的延迟。

非常感谢您的帮助。

谢谢

最佳答案

正如@hek2mgl 所说,不幸的是,大多数此类事情都是由网络问题引起的——链中的一个邮件服务器可能不堪重负,或者此时网络的某些部分可能速度很慢。当我开发自己的 PHP 应用程序时,我遇到了类似的问题。

既然您有自己的 VPS,我建议您安装自己的 SMTP 服务器。我用了 PostFix , 但还有其他人。然后您对其进行配置,使其替换内置的 unix sendmail 命令。你可以找到instructions on how to install postfix at the CentOS Wiki

如果设置正确,从 PHP 调用 mail() 会将消息添加到 Postfix 中的发送队列,而不是尝试联系外部邮件服务器。它会立即返回(这意味着您的应用程序会感觉更快),而 Postfix 会在需要时继续尝试在后台发送电子邮件。

关于php - 通过 mail() Apache+PHP5.3+sendmail 发送电子邮件时延迟 20 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15937400/

相关文章:

php - Symfony ExpressionLanguage 评估带破折号的字符串

perl - 将 CGI(perl) 错误输出重定向到客户端

javascript - WordPress 自定义主题 : mixing php and javaScript?

php - 我的留言簿中的所有字段都显示为空白

apache - 在 .htaccess 中允许使用 mod_rewrite 而不是 mod_setenvif 的 env

bash - curl : send html email with embedded image and attachment

python - 我如何在Python中发送电子邮件?

git - 覆盖 Git-Send-Email to-cmd 选项

PHP 某些部分代码没有执行

java - 无法使用 Apache 从 Android 向 Django Web 服务器发出 http 请求