为啥 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 中使用 SMTPsmtp_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 默认安装?的主要内容,如果未能解决你的问题,请参考以下文章

cURL 不适用于 WAMP

curl 不适用于 wamp 服务器的 php 5.4.3

CURL PHP 不适用于 WAMP 和 XAMPP

Index.php 有效,而 Index.html 不适用于 WAMP 上的本地主机

php composer.phar 更新不适用于 Symfony 安装

为啥 :hover 不适用于指定的类