是什么让PHP的mail()函数变得如此之慢?

9 php email networking gmail

我在我的服务器上创建了一个快速的PHP脚本,其中包含对mail()的调用并开始测试它.html页面总是立即加载,所以我认为这意味着包含对mail()的调用的PHP已经完成执行.但是,邮件()发送的电子邮件只能在通话后每隔10-20分钟收到一次.为何延误?mail()是否会触发外部程序?(如果相关,则将电子邮件发送到Gmail电子邮件帐户)

Mic*_*ski 21

您看到的行为与PHP的mail()功能无关 .相反,它是PHP发送邮件的SMTP邮件服务器,这需要时间来传递.该服务称为邮件传输代理或MTA.

有很多潜在的原因不能立即交付.可能,您看到的延迟是接收服务器上的灰名单,这意味着接收邮件服务器拒绝接受该消息,直到发送服务器(您的PHP脚本将其发送到)尝试几次重新发送它.表现良好的MTA将重试失败的发送尝试,但垃圾邮件服务器通常不会,这使得这是一种简单但有效的减少垃圾邮件的方法.

它甚至可以像SMTP服务器上等待发送的长队列消息一样简单,从而使您排队等候.(虽然更可能是灰名单)

最重要的是要记住,电子邮件不是即时的,因此永远不能保证是即时的.在过去十年左右的时间里,我们已经习惯了很快就能通过电子邮件快速交付,但是你永远不能保证快速交付.


CP5*_*510 9

正如@Michael Berkowski所说,这不是mail()函数本身.mail()通过调用SMTP快递软件内置的系统来工作.然后,它通过执行必要的DNS查找来自动协商与接收系统的对话,以找到正确的邮件服务器.然后该服务器接收您的消息,通过灰名单和反向DNS查找检查您的系统,扫描并运行它自己的垃圾邮件/病毒防护,然后最终交付.此外,许多邮件服务器延迟未知的发送服务器,以防止邮件DOS和渔民.