3

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

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

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

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

4

6 回答 6

2

间接解决方案。

我们所做的是使用 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 &");
...
?>
于 2009-11-09T23:06:07.140 回答
1

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

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

于 2009-11-09T23:28:26.790 回答
1

-odb已弃用(从 sendmail 版本 8.7 开始)。1
考虑使用-ODeliveryMode=b(用于 sendmail 命令行或 sendmail_path 设置)
或添加O DeliveryMode=bPHPmail函数的附加参数。2

于 2011-08-22T13:04:50.777 回答
0

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

于 2009-11-09T23:17:47.367 回答
0

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

于 2014-09-26T20:07:35.230 回答
-1

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

sendmail_path = /usr/sbin/sendmail -t -i
于 2009-09-29T09:13:58.740 回答