PHP mail() 函数在 Windows 2008 R2 IIS 7.5 上停止工作。为什么?

PHP mail() 函数在 Windows 2008 R2 IIS 7.5 上停止工作。为什么?

PHP 5.3.13 和 IIS 7.5。PHP mail() 一直运行良好,直到我做了 3 件事(同时)。(a) 为服务器添加内存,从 4gb 增加到 5gb;(b) 运行 Windows Update 并应用所有可用更新;(c) 删除 SQL 服务器安装。

Windows 2008 R2 SMTP 服务器仍可正常工作。我知道这一点,因为我可以将文件放入拾取文件夹中,然后邮件就会被发送。

这个PHP测试脚本:

<?php 
$to='my_name@another_domain.com'; 
$subject='Test email using PHP'; 
$message='This is a test email message'. "\r\n"; 
$headers='From:[email protected]' . "\r\n" 
       . 'Reply-To:[email protected]' . "\r\n" 
       . 'X-Mailer: PHP/' . phpversion(); 

mail($to, $subject, $message, $headers, '[email protected]'); 
?>

在 PHP 日志文件中创建此条目:

 mail() on [C:\www\pgs.com\store\admin\test_php_mail.php:1]: To: my_name@another_domain.com -- Headers: From:[email protected]  Reply-To:[email protected]  X-Mailer: PHP/5.3.13

PHP 的 mail.log。

现在使用 PHP 时,我从未看到文件放在 IIS 拾取文件夹中。另一方面,当使用网站上以前可用的功能(例如密码恢复)时,mail.log 中没有任何条目。(邮件日志刚刚设置完毕,以帮助解决此问题。)

我该如何解决这个问题?或者至少我该如何诊断问题?谢谢。

答案1

提供一些有关如何在 PHP 中配置邮件的详细信息会有所帮助。

我在服务器上尽可能避免使用 MSWindows - 但我不知道 PHP 会创建一个 mail.log 文件(考虑到 PHP 的架构,PHP 以这种方式与文件交互是非常不寻常的),而且您发布的代码中没有任何内容可以写入这样的文件。您确定这不是由您的 MTA 创建的吗?

您是否尝试过通过输入 SMTP 命令发送电子邮件直接进入 telnet 会话? 在系统上使用不同的电子邮件客户端?

答案2

在虚拟 SMTP 服务器的属性下 - 在“访问”选项卡上,我授予服务器的公共 IP 地址中继电子邮件的权限。停止然后启动 SMTP 服务器,一切正常。请注意,我曾提到来自 PHP 应用程序的电子邮件从未进入拾取文件夹 - 现在仍然没有。但它确实进入了队列文件夹。(可以使用 IIS 6.0 管理器访问 SMTP 服务器属性。)

答案3

我怀疑这不是你的问题,但还有一个仅适用于 Win32 的“sendmail_from”设置。应该直接位于 php.ini 中的“smtp_port”设置下方。

可能是删除 SQL Server 导致了这个问题。您是否在 IIS 框中安装了 SMTP 服务器功能?如果没有,我认为您需要安装它,或者您需要在 php.ini 中指向真正的 SMTP 服务器而不是 SMTP=localhost。

相关内容