【问题标题】:Delay when using PHP mail() function to send email through Exchange (using sendmail as a relay)使用 PHP mail() 函数通过 Exchange 发送电子邮件时的延迟(使用 sendmail 作为中继)
【发布时间】:2010-11-28 03:10:03
【问题描述】:

我正在使用 PHP mail() 函数从 Linux 服务器发送电子邮件,但使用 Exchange 作为主要 MTA。为实现此目的,已将 sendmail 设置为将所有内容中继到本地 Exchange 服务器,然后将电子邮件发送出去。

这工作正常,但 PHP 脚本似乎要等到超时限制才能完成。我想也许它正在等待 sendmail 的响应,它没有来就变成了它只是一个中继?

我为“sendmail_path”-odb 指定了 php.ini 命令行选项,它应该以“后台”传递模式启动 sendmail,这意味着在单独的进程中触发电子邮件,然后立即返回。但是 PHP 脚本仍然需要 30 秒才能结束。

有人有什么想法吗?我有点难过。 谢谢。

【问题讨论】:

  • 尝试在 serverfault.com 上询问 // 这与严格的编程无关,我认为这不是您的编程失败。
  • 它应该是编程控制的,因为脚本无法识别发送邮件已完成并超时。也许通过一些上下文代码/示例代码,我们可以进一步提供帮助。

标签: php email exchange-server sendmail


【解决方案1】:

间接解决方案。

我们所做的是使用 php 的 system() 在后台发送电子邮件,这样用户就不必等待电子邮件出去了。

这样的……

<?php //sendEmail.php
mail($argv[1], $argv[2], $argv[3]);
?>

你的脚本:

<?php
...
system("php sendEmail.php to@address.com 'subject' 'message' 1>/dev/null 2>&1 &");
...
?>

【讨论】:

    【解决方案2】:

    我有一个similar question。就我而言,基础架构团队实际上增加了 30 秒的人为延迟。我认为它实际上更像是一种等待确认电子邮件已实际发送的设置,默认情况下等待 30 秒,而不是任意明确设置 30 秒延迟。无论如何,听起来你在同一条船上。与管理 Exchange 服务器的人核实,告诉他们发生了什么,看看他们是否能发现设置。就我而言,我必须实际记录 Wireshark 发生的事情,然后才能说服团队确实存在 Exchange 而不是我的应用程序的问题。

    【讨论】:

      【解决方案3】:

      -odb 已弃用(sendmail 版本 8.7 以上)。 1
      考虑使用 -ODeliveryMode=b(用于 sendmail 命令行或 sendmail_path 设置)
      或者在PHP mail函数的附加参数中添加O DeliveryMode=b2

      【讨论】:

        【解决方案4】:

        不看 php/mail 日志就不能说太多。但是您为什么不直接从 PHP 发送到您选择的 MTA?只需使用像PHPMailer 这样的库,身份验证就会很容易。

        另外,出于调试目的,您可以安装 postfix(在带有包管理器的 Linux 上需要 3 秒)并将其设置为中继,Postfix 日志在详细模式下非常广泛,您可以发现 sendmail 是否是您的瓶颈。

        【讨论】:

          【解决方案5】:

          另一种方法可能是使用 PEAR 的 Mail。我用它来发送电子邮件到 qmail 和 Exchange SMTP 服务器。

          【讨论】:

            【解决方案6】:

            如果有任何帮助,我的 sendmail_path 如下所示:

            sendmail_path = /usr/sbin/sendmail -t -i
            

            【讨论】:

              猜你喜欢
              • 2013-04-02
              • 2018-01-17
              • 1970-01-01
              • 1970-01-01
              • 2012-07-24
              • 2015-07-19
              • 2012-02-05
              • 1970-01-01
              • 2020-10-02
              相关资源
              最近更新 更多