2013-04-10 35 views
2

今天我发现我的网站联系表格大约需要20秒,在我的Godaddy Centos VPS服务器上发送邮件。20秒通过邮件发送邮件时的延迟()Apache + PHP5.3 + sendmail?

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

创建具有以下PHP代码test.php的文件来测试邮件:

<?php 

mail("[email protected]", "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=<[email protected]>, [email protected] 
Apr 10 14:57:05 ip-103-1-173-250 sendmail[27681]: r3ALv4i3027681: [email protected], 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

从上面的maillog,很明显,电子邮件是立即发送,我确实收到电子邮件。

这里的邮件日志,当我通过我的网站联系形式发送:

Apr 10 14:54:22 myhostname sendmail[27655]: r3ALsMjV027655: [email protected], size=940, class=0, nrcpts=1, msgid=<[email protected]>, [email protected] 

Apr 10 14:57:56 myhostname sendmail[27655]: r3ALsMjV027655: [email protected], [email protected] (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) 

以上的maillog显示3分钟半的时间延迟。

我不知道什么是通过Apache发送时造成的延迟。

您的帮助将不胜感激。

感谢

+0

大多是这样的延迟引起的通过网络问题 – hek2mgl 2013-04-10 22:12:30

+0

您可以以详细模式以apache用户身份发送测试消息吗? '(echo subject:test; echo to:[email protected]; echo from:[email protected]; echo; echo test)|/usr/sbin/sendmail -i -t -v -fsupport @ mydomain.com'这可能有助于通过查找延迟交付阶段来缩小可能性。 – AnFi 2013-04-11 09:45:34

回答

1

正如@ hek2mgl说,遗憾的是大多数这样的事情都是由网络问题,一个邮件服务器是在链可以压倒或网络的某些部分可能只是在这一点上缓慢造成。当我开发自己的PHP应用程序时,遇到类似的问题。

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

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

+0

-1:如果user2205533尚未安装MTA,则mail()将立即返回(有错误)。 – symcbean 2013-04-10 22:57:09

+0

感谢您的帮助,我现在安装PostFix只是为了发送邮件,但没有收到,因为我有一个邮件服务器不在我的网站相同的服务器上。现在,电子邮件现在可以直接发送。非常感谢。 – user2205533 2013-04-22 08:58:14

-1

我敢打赌,你的工资不是PHP的mail()函数造成的。

mail()函数是一个调用CLI接口到MTA的exec调用的简单包装。简单地说,一个程序不可能有这样的延迟 - 每当我遇到这个问题时,这是MTA试图同步卸载消息并且一路上遇到问题的结果(配置错误的DNS,缺少智能主机,ident查找....)。

由于它是一个VPS,您可以控制MTA如何配置(错误)。这是ServerFault的一个主题 - 不是Stackoverflow。

(BTW你检查的CONFIGS者为CLI和Web服务器SAPI一样吗?你有没有尝试从执行的是CLI web服务器SAPI?)

0

我发现专家交流,并固定该解决方案这对我来说确切的问题。

---粘贴下面---

我的问题是,Sendmail的寻找一个完全合格的域名(FQDN)的名字,这是我没有在我的主机文件有。有一次,我从这个改变了它:

127.0.0.1本地主机

127.0.1.1网络服务器

这样:

127.0.0.1本地主机的localhost.localdomain网络服务器