【问题标题】:Sometimes big delay when using PHP mail()使用 PHP mail() 时有时会有很大的延迟
【发布时间】:2010-05-28 07:55:42
【问题描述】:

我有一个处理来自 Windows 应用程序的订单的网站。其工作原理如下:

  1. 用户在 Windows 应用中点击“立即订购”
  2. 应用通过 POST 将文件上传到 PHP 脚本
  3. 脚本立即调用 PHP mail() 函数(订单不存储在数据库中)

这在大多数情况下都可以正常工作。但是,有时会发生很大的延迟(几天)。客户致电产品尚未交付的原因。

延迟邮件的邮件标题如下:

延迟似乎发生在这里:

Received: (from @localhost)
by ---- (8.13.8/8.13.8/Submit) id o4J9lA7M031307;
Wed, 19 May 2010 11:47:10 +0200

我已多次向托管我网站的网络托管服务报告此问题。他们说延迟不会发生在他们的网络中(不可能)。

但他们确实确认该电子邮件于 5 月 26 日首次出现在他们的邮件服务器中,这是邮件撰写后的 7 天。订单标有用户本地PC的时间戳,也与5月19日匹配(所以不是PC时钟问题)

有趣的是,所有延迟的邮件(订单是在不同的日子下达的)同时送达。于是我的邮箱里突然收到了14封不同日子的邮件。

您知道可能会引入这种延迟吗?我的 PHP 代码中是否存在导致此问题的错误? (我不敢相信我可以在我的 PHP 代码中引入一个 7 天的循环)

【问题讨论】:

    标签: php http email


    【解决方案1】:

    你是对的 - 它与 PHP 无关。

    通常,慢邮件问题都与 DNS 问题有关 - 但这不是这里的问题。

    每当我配置了 MTA(邮件传输代理)时,我都会告诉它在 7 天到期之前放弃。

    有趣的是,所有延迟的邮件(订单是在不同的日子下的)同时收到。

    听起来要么 MTA 仅配置为每 7 天(!)出列邮件,要么出现问题,您的托管公司花了 7 天时间来修复它。

    他们说他们的网络没有出现延迟

    是时候寻找新的托管公司了。

    C.

    【讨论】:

      【解决方案2】:

      电子邮件并不是发送此类信息的非常可靠的方式。

      可能只是涉及的 2 台服务器中的一台出现了一些短期问题,这意味着尝试发送电子邮件时遇到了问题。

      邮件服务器通常会在重试之前等待一段时间(尽管我预计初始重试的时间会比 6 天短得多)。您可能会遇到一些突发事件的原因是所有重试最终都通过了。

      不过,它会等待这么长时间才能重试,这似乎有点奇怪。

      您可能需要查看您的邮件服务器日志,看看它们在发送邮件时是否有任何问题。

      【讨论】:

      • 他们检查了邮件服务器的日志,邮件在 5 月 26 日(撰写后 7 天)首次出现在他们的日志中。他们说没有其他东西可以在 PHP mail() 和这个邮件服务器之间排队邮件 - 这一定是错误的
      【解决方案3】:

      还有这个:

      X-Virus-Scanned: by amavisd-new
      

      这表明在最初接受邮件后至少还有一步。 amavis 本身很可能会将邮件传递给 ClamAV、Spamassassin 等……而其中任何一个都可能由于某种原因导致延迟。

      鉴于网络服务器 SMTP 上的 8.13 版本号,它很可能是 Sendmail。如果您对服务器有任何访问权限,请使用“mailq”检查外发邮件队列,如果您有权限,或者让那里的管理员为您做这件事。由于延迟发生在服务器内的某个地方,在某些时候它应该被塞入 sendmail 的待处理队列中,并且还会附上延迟原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        • 1970-01-01
        • 2014-08-03
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 2018-06-16
        相关资源
        最近更新 更多