windows 10 下 php 7.4.33 的 mail() 函数需依赖 sendmail for windows 等外部 mta;须配置 smtp_server、端口、授权码等参数,并在 php.ini 中正确设置 sendmail_path 路径后重启服务。

Windows 10 下 PHP 7.4.33 的 mail() 函数本身不能直接发信,它必须依赖外部邮件传输代理(MTA),比如 sendmail.exe 模拟器。原生 Windows 没有 sendmail,所以你要手动配置一个轻量级替代方案——最常用、实测兼容性最好的是 Glob.com.au 的 sendmail for Windows。
准备前提
确保你已安装 WAMP/XAMPP/phpStudy 等集成环境,且 PHP 版本确认为 7.4.33(可通过 php -v 验证)。Apache 或 Nginx 服务正常运行,php.ini 可编辑。
下载并配置 sendmail
从官方地址下载:https://www.php.cn/link/7f3721efabdb38d926d9688f7e1ed28e(若无法访问,可用国内镜像如百度网盘备用链接)。
解压后放到固定路径,例如:E:\wamp64\sendmail(路径中不要含中文或空格)。
编辑 sendmail.ini,关键项设置如下:
- smtp_server=smtp.qq.com(推荐 QQ 邮箱;也可换 smtp.163.com / smtp.gmail.com,注意端口和加密方式)
- smtp_port=587(优先用 587 + TLS;若失败可试 465 + SSL)
- auth_username=your@qq.com(你的完整邮箱地址)
- auth_password=xxxxxxxxxxxxxx(不是登录密码,是邮箱「SMTP 授权码」,QQ/163/Gmail 均需在网页端开启 SMTP 并生成)
- force_sender=your@qq.com(强制发件人,避免被拒)
- 其余行全部用分号
;注释掉,保持简洁
修改 php.ini 启用 mail() 函数
找到 PHP 7.4.33 对应的 php.ini(WAMP 用户可在系统托盘点击图标 → PHP → php.ini;XAMPP 在 \xampp\php\php.ini)。
搜索 [mail function],取消注释并修改这一行:
⚠️ 注意:路径必须是双引号包裹,且与你实际存放位置完全一致;-t 表示从邮件头读收件人,-i 忽略点号结束符。
保存后,重启 Apache/Nginx 和 PHP 服务(WAMP/XAMPP 需重启整个服务)。
测试代码与常见问题
新建 test_mail.php,内容如下:
<?php $to = 'receiver@example.com';
$subject = 'PHP mail() 测试';
$message = "这是一封来自 Windows + PHP 7.4.33 的测试邮件。";
$headers = "From: your@qq.com\r\n" .
"Reply-To: your@qq.com\r\n" .
"X-Mailer: PHP/" . phpversion();
if (mail($to, $subject, $message, $headers)) {
echo "邮件已发出";
} else {
echo "发送失败,请检查配置";
}
?>
运行后无报错但收不到?重点排查:
- QQ/163 邮箱是否真正开启了「IMAP/SMTP 服务」并生成了授权码(不是账户密码)
- 防火墙或杀毒软件是否拦截了
sendmail.exe的外网连接 - PHP 错误日志(
error_log)里是否有sendmail.exe启动失败、超时或认证拒绝记录 - 尝试把
sendmail.ini中的smtp_port改为465,并添加一行:smtp_ssl=ssl
不建议在生产环境长期依赖 mail() + sendmail.exe。它缺乏错误反馈、不支持附件、易被识别为垃圾邮件。上线前请迁移到 PHPMailer 或 SMTP 类库。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











