我遇到这个问题:
PHP Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for chris<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d2fcbfb3bab3bc92b5bfb3bbbefcb1bdbf" rel="noreferrer noopener nofollow">[email protected]</a> in c:\inetpub\wwwroot\mailtest.php on line 12
从此脚本:
<?php
$to = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4f2c273d263c61222e272e210f28222e2623612c2022" rel="noreferrer noopener nofollow">[email protected]</a>";
$subject = "test";
$body = "this is a test";
if (mail($to, $subject, $body)){
echo "mail sent";
}
else {
echo "problem";
}
?>
服务器上 php.ini 的部分:
[mail function]
; For Win32 only.
SMTP = server.domain.com; for Win32 only
smtp_port = 25
; For Win32 only.
sendmail_from = <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c1b2b4b1b1aeb3b581a5aeaca0a8afefa2aeac" rel="noreferrer noopener nofollow">[email protected]</a>
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =
(请注意,“服务器”和“域”准确指的是实际服务器和域名)
在 IIS 中,SMTP 正在运行。在“访问”
选项卡的“中继”
按钮下,将选择哪些计算机可以通过此虚拟服务器中继设置为复选框“仅限下面的列表”
列表中为 “127.0.0.1(xxx.xxx.xxx.xxx)”(x 代表实际服务器 IP 地址)。
服务器正在运行 Windows Server 2003 Service Pack 2
,截至 2008 年 9 月 1 日下午 5 点已完全修补。我假设它正在运行 IIS7
(如何检查?)。
有什么想法吗?
回应Espo :该计算机托管在数据中心。我们不想使用 Gmail 帐户(我们正在这样做,但想放弃它)。 Windows Server 2003 带有自己的 SMTP 服务器。
更新:根据 Yaakov Ellis 的建议,我放弃了所有中继限制并将服务器 IP 添加到允许列表中(使用提供的反向 DNS 按钮),然后事情开始工作。
感谢 Espo 和 Yaakov 帮助我。
最佳答案
尝试取消 SMTP 服务器中中继的 IP 限制,并向所有中继开放。如果设置后它有效,那么您就知道问题与原始限制有关。在这种情况下,可能是 DNS 问题,或者您列出的 IP 地址有误。
关于php mail() 不适用于 Windows 2003、IIS SMTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920/