位置:首页 > PHP > XAMPP Sendmail配置教程:本地邮件发送测试与调试

XAMPP Sendmail配置教程:本地邮件发送测试与调试

时间:2026-08-14  |  作者:深海捕梦者  |  阅读:0

这一步别省:先下载最新版 fake-sendmail,再把 Gmail 的应用专用密码配好。

因为从 XAMPP 7.4+ 开始,sendmail 已经被移除了,所以需要手动放置 sendmail.exe 和对应的 ini 文件。SMTP 则要设置为 smtp.gmail.com:587。

与此同时,php.ini 里的 sendmail_path 必须带上 -t 参数,sendmail.ini 中的 auth_password 必须填写 16 位小写的应用专用密码,而且 force_sender 也要与其完全一致。

文件保存时编码要选 ANSI,最后启用 OpenSSL,重启 Apache 之后再进行测试。

XAMPP Sendmail配置,本地邮件发送测试与调试

要在XAMPP环境下让PHP的mail()函数真正发出测试邮件,必须补全缺失的sendmail.exe,并严格匹配SMTP服务商要求。

XAMPP 7.4+已彻底移除sendmail目录,直接编辑php.ini里的SMTP参数,或复制旧版sendmail.exe进去,都无效。Gmail/QQ邮箱还强制要求应用专用密码而非登录密码,填错就静默失败。

确认XAMPP版本与sendmail物理存在状态

打开命令行,执行dir C:xamppsendmail

若提示“系统找不到指定的路径”,说明你用的是XAMPP 7.4或更新版本。【sendmail.exe物理上不存在,硬配sendmail.ini是白忙活】

不要尝试从网上下载“XAMPP自带sendmail”压缩包。那全是7.3及更早版本的残留物,与当前PHP 8.x不兼容。

fake-sendmail for Windows下载最新release的zip包,如fake-sendmail-v1.0.0.zip。

解压后仅保留sendmail.exesendmail.ini两个文件。

部署sendmail.exe并配置基础路径

C:xampp下手动新建文件夹:sendmail

把下载解压出的sendmail.exesendmail.ini放入该目录。

打开C:xamppphpphp.ini,定位到[mail function]区块,修改以下三行,其余保持原样:

  • SMTP = smtp.gmail.com
  • smtp_port = 587
  • sendmail_path = "C:xamppsendmailsendmail.exe -t"

注意:sendmail_path必须用英文双引号包裹完整路径,且末尾带-t参数。

漏掉它,sendmail.exe将无法读取邮件头中的To字段。

Gmail SMTP四要素精准配置

打开C:xamppsendmailsendmail.ini,全部清空,粘贴以下内容。逐项核对,不可跳过:

  • [sendmail]
  • smtp_server=smtp.gmail.com
  • smtp_port=587
  • error_logfile=error.log
  • debug_logfile=debug.log
  • auth_username=your.name@gmail.com
  • auth_password=abcd-efgh-ijkl-mnop
  • force_sender=your.name@gmail.com

【auth_password必须是Google账户开启两步验证后生成的16位应用专用密码,全小写、无空格、无连字符;填登录密码必定失败】

【force_sender必须与auth_username完全一致,否则Gmail返回553 5.7.1错误】

保存后,确保sendmail.ini编码为ANSI(非UTF-8),否则中文注释可能导致解析失败。

用记事本另存为时,编码选择“ANSI”。

启用OpenSSL并重启Apache

打开C:xamppphpphp.ini,搜索extension=openssl,删掉前面的分号取消注释。

进入XAMPP控制面板,点击Apache右侧的“Stop”,再点“Start”。

【改了php.ini不重启Apache,所有配置都不生效】

检查Apache日志窗口是否出现“Apache started”字样,没有报错即为成功。

编写测试脚本并验证日志

C:xampphtdocs下新建testmail.php,内容如下:


$to = 'your.test@email.com';
$subject = 'XAMPP mail() test at ' . date('Y-m-d H:i:s');
$body = "This is a plain-text test email from XAMPP.nnTime: " . date('c');
$headers = "From: your.name@gmail.comrnReply-To: your.name@gmail.comrnMIME-Version: 1.0rnContent-Type: text/plain; charset=UTF-8";
if (mail($to, $subject, $body, $headers)) {
echo ' 邮件已提交至sendmail队列';
} else {
echo ' mail()调用失败';
}
?>

浏览器访问http://localhost/testmail.php,页面显示即表示PHP层调用成功。

优先查看debug.log

先直接看C:xamppsendmaildebug.log的最后一行,确认里面有没有Connected to smtp.gmail.com:587

  • 如果看到的是Connection timed out,通常意味着端口或者服务器地址填错了。
  • 如果出现Authentication failed,马上核对应用专用密码是不是输错了,或者已经失效、过期了。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

精选合集

更多

大家都在玩