为啥 mail() PHP 函数不适用于 WAMP 默认安装?
Posted
技术标签:
【中文标题】为啥 mail() PHP 函数不适用于 WAMP 默认安装?【英文标题】:Why mail() PHP function does not work with WAMP default installation?为什么 mail() PHP 函数不适用于 WAMP 默认安装? 【发布时间】:2011-03-25 15:11:28 【问题描述】:我默认安装了 WAMP Server 2.0。
我正在尝试使用这个简单的脚本发送电子邮件:
<?php
if (mail('my_email@gmail.com', 'My Title', 'Some Text'))
echo "OK";
else
echo "Why ??";
?>
很遗憾,我收到以下警告:
警告:mail() [function.mail]:无法在“localhost”端口 25 连接到邮件服务器,请验证 php.ini 中的“SMTP”和“smtp_port”设置或在 C 中使用 ini_set() :\My_Path\send_email.php 在第 3 行 为什么?
这可能是什么原因?
我希望发送电子邮件是一项非常简单的任务...... :(
【问题讨论】:
您需要访问外发邮件服务器才能发送邮件。mail()
函数连接到在您的 php.ini 文件中配置的服务器(如错误消息中所述)并指示它发送消息。我建议使用谷歌搜索使用 php 和 gmail 发送电子邮件,以获得有关 mail()
和 smtp 服务器基础知识的好教程。
【参考方案1】:
为了能够发送电子邮件,您需要一个外发电子邮件服务器 (MTA)。在大多数 Linux 系统中默认存在一个,PHP 将通过将邮件提交到 sendmail 来使用它,这是一个 Linux 应用程序/别名,用于将邮件提交到您安装的任何 MTA。
默认情况下,Windows 不包含 MTA。在 Windows 中,为了能够从 PHP 发送邮件,您需要访问某个外发电子邮件服务器并告诉 PHP 它的地址和端口。这是在 php.ini 中使用 SMTP
和 smtp_port
设置完成的。它将默认为端口25
上的localhost
。除非您自己在该机器上设置了邮件服务器,否则这将失败。
例如,如果您的 ISP 为您提供外发邮件服务器,您可以使用其地址和端口号。或者,如果您对发送邮件很认真,您可以在本地机器或本地网络中的某个地方设置自己的邮件服务器。
【讨论】:
谢谢,我真的在寻找一个简单易用的 Windows 解决方案,因为我相信当我将应用程序放在真正的 Unix 服务器上时,我不会遇到这个问题。那么对于 Windows 来说,最简单的解决方案是什么? 我认为最简单的方法就是将其指向您的 ISP 的 SMTP 服务器(尽管如果您在测试环境中并且实际上不希望发送电子邮件,这样做可能不太好) .或者您可以查看以下解决方案:***.com/questions/30076/… - 看起来 Windows Server 也带有自己的 SMTP 服务器,您可以安装。 请注意,如果您使用 ISP 的外发电子邮件服务器并且您使用的是住宅连接,您将需要遵守他们可能禁止运行邮件列表的政策,限制您可以发送的电子邮件数量,要求您在“发件人”行等中从您的 ISP 电子邮件地址发送。如果您想发送严肃的电子邮件,您可以考虑自己设置 SMTP 服务器,或支付外部邮件中继费用。【参考方案2】:简答:没有为本地计算机 (localhost) 配置 SMTP 服务器。 Windows 没有提供开箱即用的内置 SMTP 服务器。您可以通过不同的主机中继邮件(使用SMTP
php.ini 指令) - 但很少有为您测试环境邮件消息找到开放中继的地方。
除了使用mail()
,您还可以使用PHPMailer 之类的脚本,它可以通过适当的身份验证直接连接到您的外发电子邮件服务器。这是quick snippet for Gmail(虽然它不完整)和full example。
【讨论】:
【参考方案3】:您可以使用“Fake Sendmail”:http://glob.com.au/sendmail/
所以你不需要在你的测试机器上安装一个 smtp 服务器,你只需要在你的 php.ini 中设置程序的路径
Ciao! 斯蒂芬
【讨论】:
以上是关于为啥 mail() PHP 函数不适用于 WAMP 默认安装?的主要内容,如果未能解决你的问题,请参考以下文章
Index.php 有效,而 Index.html 不适用于 WAMP 上的本地主机