PHP函数mail()无法工作

14
我在php编程中使用了mail()函数,但是我没有成功发送任何邮件。在继续之前,我想详细说明使用mail()函数的上下文。
我的网站没有托管,所以它在本地主机上。我设置了smtp、端口sendmail_path等。
经过大量搜索后,似乎我需要下载一个邮件服务器。我下载了一个免费的sendmail服务器,并按照网站建议进行配置。然而,一切都徒劳无功。此外,有人告诉我,除非我将网站托管到本地主机之外,否则不能使用mail函数。请指导我。
<?php
   $from = "oooo@hotmail.com"; // sender
   $subject = " My cron is working";
   $message = "My first Cron  :)";

   // message lines should not exceed 70 characters (PHP rule), so wrap it

   $message = wordwrap($message, 70);

   // send mail

   ini_set("SMTP","localhost");
   ini_set("smtp_port","25");
   ini_set("sendmail_from","00000@gmail.com");
   ini_set("sendmail_path", "C:\wamp\bin\sendmail.exe -t");

   mail("jXXXXXX@gmail.com",$subject,$message,"From: $from\n");

   echo "Thank you for sending us feedback";

?>

这是我的sendmail配置文件:

这是我的sendmail配置文件:

smtp_server=smtp.gmail.com
smtp_port=587
smtp_ssl=auto

;default_domain=domain.com
auth_username=jxxxx@gmail.com
auth_password=8888

force_sender=j*****@gmail.com

( ! ) SCREAM: Error suppression ignored for
( ! ) Warning: mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to      mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot;    setting in php.ini or use ini_set() in C:\wamp\www\test.php on line 20

尝试更改您的“发件人地址”,因为谷歌会知道您通常不被允许从Hotmail发送电子邮件。 - Rowland Shaw
尝试使用您的ISP的SMTP服务器。只要您不发送垃圾邮件,他们通常允许来自客户端的所有电子邮件。 - webmaster777
2
你有收到任何错误吗? - ɹɐqʞɐ zoɹǝɟ
@ferozakbar 是的 :( ! ) SCREAM:忽略错误抑制 ( ! ) 警告:mail() [<a href='function.mail'>function.mail</a>]:无法连接到位于“localhost”端口25的邮件服务器,请验证您在php.ini中的“SMTP”和“smtp_port”设置或在C:\wamp\www\test.php中使用ini_set() 在第20行。 - user1195450
我使用ini_set函数将localhost设置。 - user1195450
显示剩余2条评论
2个回答

34
我认为您的配置不正确,如果您正在使用XAMPP,则可以轻松地从本地主机发送邮件。
例如,您可以配置C:\xampp\php\php.inic:\xampp\sendmail\sendmail.ini来使用gmail发送邮件。
C:\xampp\php\php.ini中查找extension=php_openssl.dll并删除该行开头的分号,使SSL正常工作于localhost上的gmail。
在php.ini文件中找到[mail function]并更改。
SMTP=smtp.gmail.com
smtp_port=587
sendmail_from = my-gmail-id@gmail.com
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

只使用上述的发送邮件路径,它就会工作。

现在打开C:\xampp\sendmail\sendmail.ini文件。将其中的所有现有代码替换为以下代码:

[sendmail]

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=my-gmail-id@gmail.com
auth_password=my-gmail-password
force_sender=my-gmail-id@gmail.com

现在你完成了!!创建带有邮件功能的php文件并从本地主机发送邮件。
更新
首先,请确保您的PHP安装支持SSL(查找phpinfo()输出中的“openssl”部分)。
您可以在PHP.ini中设置以下设置:
ini_set("SMTP","ssl://smtp.gmail.com");
ini_set("smtp_port","465");

是的,我已经检查了我的php.ini文件,它支持openssl,请指导我现在需要做什么?我已经在Gmail上启用了IMAP。 - user1195450
这是我的代码: ini_set("SMTP","sll://smtp.gmail.com"); ini_set("smtp_port","587"); ini_set("sendmail_from","88888@gmail.com"); //ini_set("sendmail_path", "C:\wamp\bin\sendmail.exe -t"); - user1195450
你在Gmail设置中启用了IMAP选项吗? - ɹɐqʞɐ zoɹǝɟ
我正在使用WAMP,我已经启用了IMAP。 - user1195450
php_openssl已经被启用,但是php_sockets还未启用。我已经启用了这两个选项。 - user1195450
显示剩余14条评论

1

我按照 @ɹɐqʞɐ zoɹǝɟ 的解决方案操作,但它并没有完全解决我的问题,我还需要进行一步操作。

我需要在我的 Google 账户设置页面上打开“较不安全的应用程序访问”设置。这样做后,我就能够发送邮件了。

设置页面链接 - 较不安全的应用程序访问

我在我的账户中启用了两步验证,并需要将其禁用才能访问该设置。

注意: 打开较不安全的应用程序访问可能会使您的账户变得容易受攻击,不建议长期使用。在进行此操作时,我使用的是测试账户而非主要账户。


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