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。