通过php mail()无法发送邮件

6

我无法通过php的mail函数发送电子邮件。

这是我收到的错误信息。 警告:mail() [function.mail]:无法连接到“localhost”端口25的邮件服务器,请在php.ini中验证您的“SMTP”和“smtp_port”设置,或在D:\inetpub\vhosts\southernbatteries.com\httpdocs\includes\utils.php的ini_set()中使用on line 6 数组([0] => [1] => 无法发送邮件,请稍后再试...)

这到底意味着什么?这是否意味着我的Web服务器上没有安装邮件服务器?是否可能使用不同的邮件服务器,例如Gmail的邮件服务器来发送邮件?


你是否运行自己的Web服务器? - Pekka
5个回答

4
如果您想使用内置的mail(),您需要与服务器管理员交谈。在Windows上可能会使用外部SMTP服务器,但必须在php.ini设置中指定,并且PHP的内置函数不支持SMTP身份验证。
通常的方法是使用本地邮件服务器,该服务器可以与带有身份验证的“真实”SMTP服务器进行通信,或者使用类似于SwiftMailer这样的邮件软件包,可以直接连接到第三方SMTP服务器,如GMail。

事实是,我正在帮助一个朋友,他们不知道托管服务的详细信息。如果我将SwiftMailer文件上传到Web服务器,我能够使用它发送邮件吗? - Prakash Raman
@Prakash 是的,它将独立于 mail() 运行。如果服务器没有配置错误,您应该能够使用它。请参阅 http://www.swiftmailer.org/wikidocs/v3/connections/smtp 以获取 GMail 示例。 - Pekka
根据示例,它连接到本地主机的25端口。而根据我的页面抛出的错误,25可能未开放:“无法连接到位于“localhost”端口25的邮件服务器,请验证您的“SMTP”和“smtp_port”。”这是phpinfo()的一个部分 SMTP localhost localhost smtp_port 25 25看起来一切正常吗? - Prakash Raman
@Prakash,这些是不同的示例(可能有点混淆)。请使用前缀为“//Connect to Gmail (PHP5)”的示例。 - Pekka
@Pekka:我有一个疑问。SwiftMailer是否需要我的服务器运行邮件服务器?还是完全独立于它? - Prakash Raman
@Prakash 它应该是完全独立的。它直接连接到远程SMTP服务器。 - Pekka

0

你需要一个邮件服务器来发送邮件。如果你只有Apache,你无法发送邮件,除非你编辑php.ini文件并将smpt_server设置为允许你这样做的一个。请注意,这取决于你的ISP是否支持。

如果你有托管账户,你可以上传文件并在线使用。


一些来自phpinfo()的行是:SMTP localhost localhost smtp_port 25 25 Internal Sendmail Support for Windows enabled sendmail_from help@internetworldwide.org help@internetworldwide.org看起来还不错,对吧?我应该寻找其他东西来确保邮件服务器正在运行吗? - Prakash Raman

0

你应该在自己的服务器上运行自己的邮件服务器。很可能它没有启动或未安装。

我看到你正在Windows上运行它,很可能是后者。你可以尝试使用你的提供商的邮件服务器。或者谷歌的。但你很可能需要一个用户名和密码。


你是不是想说"[...]运行你自己的邮件服务器[...]"? - oezi
我该如何使用谷歌的邮件服务器?因为如果邮件是从我的Gmail帐户发送的,它会起作用。 - Prakash Raman

0

在编程中,应避免使用PHP的mail()函数,因为它会为每个发送的邮件连接和断开与邮件服务器的连接。

相反,尝试使用类似phpMailer的工具,它可以轻松配置并发送大量邮件而不会出现性能问题。


0

如果您想运行自己的邮件服务器(例如,如果这是一个开发环境),您可以使用mercury


我在托管服务器上没有太多自由。它是一个Windows系统(这就是我所知道的全部),我可能无法在其上安装任何东西。 - Prakash Raman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接