PHP xampp mail()函数不起作用

Posted

技术标签:

【中文标题】PHP xampp mail()函数不起作用【英文标题】:PHP xampp mail() function not working 【发布时间】:2015-02-01 02:24:48 【问题描述】:

我正在尝试使用 php (xampp) 从我的 gmail 帐户发送电子邮件。 我在 *** 上搜索,当我得到东西时,我将 xampp 的文件 sendmail.ini 和 php.ini 更改为,

在 C:\xampp\php\php.ini 中,我从 extension=php_openssl.dll 行的开头删除了分号,以使 SSL 为 gmail 的 localhost 工作。

在[邮件功能]下的php.ini文件中我改了

SMTP=smtp.gmail.com
smtp_port=25
sendmail_from = mukul.agrawal19@gmail.com
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

然后在 C:\xampp\sendmail\sendmail.ini 中。我用以下代码替换了 sendmail.ini 中的所有现有代码

[sendmail]

smtp_server=smtp.gmail.com
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=mukul.agrawal19@gmail.com
auth_password=my-gmail-password
force_sender=mukul.agrawal19@gmail.com

然后我写了一个简单的邮件函数

<?php
$to = 'mukulagrawal13@live.com';
$subject = 'Test email'; 
$message = "Hello World!\n\nThis is my first mail."; 
$headers = "From: mukul.agrawal19@gmail.com\r\nReply-To: mukul.agrawal19@gmail.com";
$mail_sent = @mail( $to, $subject, $message, $headers );
echo $mail_sent ? "Mail sent" : "Mail failed";
?>

然后通过我的浏览器进入此页面, 收到邮件失败的回声。

我看到了我的调试文件,我得到了

14/12/03 18:24:00 ** --- MESSAGE BEGIN ---
14/12/03 18:24:00 ** To: mukulagrawal13@live.com
14/12/03 18:24:00 ** Subject: Test email
14/12/03 18:24:00 ** From:mukul.agrawal19@gmail.com
14/12/03 18:24:00 ** Reply-To:mukul.agrawal19@gmail.com
14/12/03 18:24:00 ** 
14/12/03 18:24:00 ** Hello World!
14/12/03 18:24:00 ** 
14/12/03 18:24:00 ** This is my first mail.
14/12/03 18:24:00 ** --- MESSAGE END ---
14/12/03 18:24:01 ** Connecting to smtp.gmail.com:25
14/12/03 18:24:08 ** Connected.
14/12/03 18:24:08 << 220 mx.google.com ESMTP o17sm23150442pdn.33 - gsmtp<EOL>
14/12/03 18:24:08 >> EHLO Mukul-PC<EOL>
14/12/03 18:24:10 << 250-mx.google.com at your service, [223.186.182.29]<EOL>250-SIZE 35882577<EOL>250-8BITMIME<EOL>250-STARTTLS<EOL>250-ENHANCEDSTATUSCODES<EOL>250-PIPELINING<EOL>250-CHUNKING<EOL>250 SMTPUTF8<EOL>
14/12/03 18:24:10 ** Authenticating as mukul.agrawal19@gmail.com
14/12/03 18:24:10 >> STARTTLS<EOL>
14/12/03 18:24:12 << 220 2.0.0 Ready to start TLS<EOL>
14/12/03 18:24:14 >> QUIT<EOL>

lots of codes in unknown language.

14/12/03 18:21:47 ** Disconnected.
14/12/03 18:21:47 ** Disconnecting from smtp.gmail.com:25
14/12/03 18:21:47 ** Disconnected.
14/12/03 18:21:47 ** Disconnected.
14/12/03 18:21:47 ** Connection Closed Gracefully.

我不明白这是什么问题。

【问题讨论】:

所有服务都重启了吗? 您配置了端口 587,但它连接到端口 25。然后您尝试通过端口 25 进行 TLS,但失败了。 我在发布问题时错误地在此代码中写了 587。抱歉..让我更新一下..1 秒.. @Fred-ii- 是的..我做到了 看看projectpier.org/manual/installation/gmail-for-smtp - 我想你可能使用了错误的端口。 【参考方案1】:

好的,我得到了这个工作。不幸的是,不使用 TLS,因为端口 587 在我们的网络中被阻止,所以我不得不使用端口 465。但我希望 TLS 也可以工作。

我使用的是 XAMPP 5.6.3。

发送邮件配置:

[sendmail]
smtp_server=smtp.gmail.com
smtp_port=465
smtp_ssl=auto
error_logfile=error.log
debug_logfile=debug.log
auth_username==*****@gmail.com
auth_password=*********
force_sender=*****@gmail.com

PHP 配置:

[mail function]
SMTP=smtp.gmail.com
smtp_port=465
sendmail_from = *****@gmail.com
sendmail_path = "\"c:\xampp\sendmail\sendmail.exe\" -t"

代码:

<?php
$to = 'repicient@example.com';
$subject = 'Test email'; 
$message = "Hello World!\n\nThis is my first mail."; 
$headers = "From: *****@gmail.com\r\nReply-To: *****@gmail.com";
$mail_sent = @mail( $to, $subject, $message, $headers );
echo $mail_sent ? "Mail sent" : "Mail failed";
?>

重要:

您需要在 GMAIL 中启用 SMTP 访问,还需要允许不安全的客户端:

https://www.google.com/settings/security/lesssecureapps https://support.google.com/mail/answer/75726

请注意,您要使用的 smtp 端口已在您的防火墙中打开!我建议尝试使用 Thunderbird 从您的开发机器进行连接检查。然后你知道客户端是否能够连接。

这是我的结果:

14/12/03 12:19:32 ** --- MESSAGE BEGIN ---
14/12/03 12:19:32 ** To: *****@example.com
14/12/03 12:19:32 ** Subject: Test email
14/12/03 12:19:32 ** From: ******@gmail.com
14/12/03 12:19:32 ** Reply-To: ******@gmail.com
14/12/03 12:19:32 ** 
14/12/03 12:19:32 ** Hello World!
14/12/03 12:19:32 ** 
14/12/03 12:19:32 ** This is my first mail.
14/12/03 12:19:32 ** --- MESSAGE END ---
14/12/03 12:19:34 ** Connecting to smtp.gmail.com:465
14/12/03 12:19:34 ** Connected.
14/12/03 12:19:34 << 220 mx.google.com ESMTP pl1sm22468617wic.16 - gsmtp<EOL>
14/12/03 12:19:34 >> EHLO vm-test-03.devnet.local<EOL>
14/12/03 12:19:35 << 250-mx.google.com at your service, [xxx.xxx.xxx.xxx]<EOL>250-SIZE 35882577<EOL>250-8BITMIME<EOL>250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER<EOL>250-ENHANCEDSTATUSCODES<EOL>250-PIPELINING<EOL>250-CHUNKING<EOL>250 SMTPUTF8<EOL>
14/12/03 12:19:35 ** Authenticating as ****@gmail.com
14/12/03 12:19:35 >> AUTH LOGIN<EOL>
14/12/03 12:19:35 << 235 2.7.0 Accepted<EOL>
14/12/03 12:19:35 >> MAIL FROM: <*****@gmail.com><EOL>
14/12/03 12:19:35 << 250 2.1.0 OK pl1sm22468617wic.16 - gsmtp<EOL>
14/12/03 12:19:35 >> RCPT TO: <repicient@example.com.de><EOL>
14/12/03 12:19:35 << 250 2.1.5 OK pl1sm22468617wic.16 - gsmtp<EOL>
14/12/03 12:19:35 >> DATA<EOL>
14/12/03 12:19:35 << 354  Go ahead pl1sm22468617wic.16 - gsmtp<EOL>
14/12/03 12:19:35 >> Date: Wed, 3 Dec 2014 12:19:35 -0800<EOL>
14/12/03 12:19:35 >> To: repicient@example.com<EOL>
14/12/03 12:19:35 >> Subject: Test email<EOL>
14/12/03 12:19:35 >> From: *****@gmail.com<EOL>
14/12/03 12:19:35 >> Reply-To: *****@gmail.com<EOL>
14/12/03 12:19:35 >> <EOL>
14/12/03 12:19:35 >> Hello World!<EOL>
14/12/03 12:19:35 >> <EOL>
14/12/03 12:19:35 >> This is my first mail.<EOL>
14/12/03 12:19:35 >> .<EOL>
14/12/03 12:19:36 << 250 2.0.0 OK 1417637977 pl1sm22468617wic.16 - gsmtp<EOL>
14/12/03 12:19:36 >> QUIT<EOL>
14/12/03 12:19:36 << 221 2.0.0 closing connection pl1sm22468617wic.16 - gsmtp<EOL>
14/12/03 12:19:36 ** Disconnecting from smtp.gmail.com:465
14/12/03 12:19:36 ** Disconnected.
14/12/03 12:19:36 ** Disconnected.

【讨论】:

我更新了我的答案。我自己在 XAMPP 的测试环境中对此进行了测试......仅供参考 V3.2.1 是 XAMPP 控制台的版本,而不是 XAMPP 本身:) 非常感谢。我会检查一下。

以上是关于PHP xampp mail()函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

mail()函数在php中不起作用[重复]

PHP 函数 mail() 在 AWS EC2 服务器上不起作用

在xampp localhost中发送的php邮件不起作用[重复]

无法使用 Mercury XAMPP 发送邮件

PHP Header Location 在 localhost xampp 中不起作用?

Javascript 在 XAMPP 上的 PHP 中不起作用