PHP中mail()函数无法正常工作,如何正确配置SMTP与smtp_port?
解决PHP mail()函数无法发送邮件的配置问题
你踩的坑其实是很多新手都会遇到的——核心问题在于没有使用正确的SMTP服务端,localhost:25默认是没有运行可用的SMTP服务的,尤其是你想用Gmail账号发邮件,得直接对接Gmail的官方SMTP服务器才行。我给你一步步修正配置:
1. 修正php.ini的[mail function]配置
注意:当你使用sendmail.exe作为邮件发送代理时,php.ini里的SMTP和smtp_port其实会被忽略,真正生效的是sendmail.ini的配置,但我们还是要确保sendmail_path正确,并且补充必要参数:
[mail function] ; 这两个配置仅作参考,实际由sendmail.ini控制 SMTP = smtp.gmail.com smtp_port = 587 sendmail_from = myemailaddress@gmail.com ; 新增 -i 参数,避免邮件正文换行导致发送失败 sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t -i"
2. 关键修正sendmail.ini配置
这是你之前配置的核心错误点,必须把SMTP服务器换成Gmail的官方地址,同时匹配正确的端口和SSL设置:
[sendmail] ; 替换为Gmail的SMTP服务器,不要用localhost smtp_server=smtp.gmail.com ; 使用587端口(TLS加密),465端口(SSL加密)也可以,二选一 smtp_port=587 ; 对应端口设置加密方式:587用tls,465用ssl,不要用auto smtp_ssl=tls error_logfile=error.log debug_logfile=debug.log ; 填写完整的Gmail邮箱地址 auth_username=myemailaddress@gmail.com ; 重点:这里不能用Gmail的普通登录密码! ; 必须使用「应用专用密码」(前提是你的Gmail账号开启了两步验证) ; 如果没开两步验证,先去账号设置里开启,再生成应用专用密码 auth_password=你的Gmail应用专用密码 ; 必须和auth_username一致 force_sender=myemailaddress@gmail.com
3. 必做的后续检查
- 重启Apache服务:修改配置后一定要重启XAMPP的Apache,否则新配置不会生效。
- 查看日志文件:sendmail目录下的
error.log和debug.log是排查问题的关键!如果发送失败,直接看日志里的报错信息(比如密码错误、端口被防火墙拦截、SSL证书问题)。 - 防火墙/杀毒软件放行:有些本地安全软件会拦截sendmail.exe的网络请求,暂时关闭或者把sendmail.exe加入白名单试试。
测试脚本
用下面的简单脚本测试邮件发送:
<?php $to = "你的测试接收邮箱@example.com"; $subject = "PHP Mail 测试邮件"; $message = "这是通过PHP mail()函数配合sendmail发送的测试邮件。"; $headers = "From: myemailaddress@gmail.com\r\n"; $headers .= "Reply-To: myemailaddress@gmail.com\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; if(mail($to, $subject, $message, $headers)){ echo "邮件发送成功!"; } else { echo "邮件发送失败,请查看sendmail日志排查问题。"; } ?>
如果是用其他邮箱(比如Outlook、QQ邮箱),只需要替换对应的SMTP服务器和端口即可:
- Outlook/Office365:
smtp.office365.com,端口587,加密方式tls - QQ邮箱:
smtp.qq.com,端口465,加密方式ssl
内容的提问来源于stack exchange,提问作者Dominic Sham
相关产品推荐
相关产品推荐

