宝塔默认禁用PHP的mail()函数,需手动删除禁用列表中的mail并确认sendmail_path配置有效、重启PHP服务;SMTP插件失效常因防火墙封端口、缺openssl/sockets扩展或未用邮箱授权码;邮件被拒收多因缺少SPF/DKIM/DMARC记录、使用免费域名或未配PTR反向解析。

PHP 的 mail() 函数根本没启用
宝塔默认禁用 mail(),不是配置错,是压根没开。很多用户反复检查 SMTP 设置却忽略这点,导致死循环排查。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 进宝塔 → 网站 → PHP 设置 → 禁用函数列表,删掉
mail - 确认
sendmail_path在 PHP 配置里没被注释或设为空(宝塔界面“配置文件”里搜这一行) - 重启 PHP 服务(不是重启面板或服务器)
- 写个测试脚本:
<?php var_dump(function_exists('mail'));返回true才算过关
WordPress 或 Typecho 用 SMTP 插件但收不到信
插件只负责调用 PHPMailer,底层仍依赖 PHP 的网络能力。常见错误是宝塔防火墙或服务器安全组拦了 SMTP 端口,或者 PHP 没装 openssl 扩展。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 检查 PHP 扩展是否启用了
openssl和sockets(宝塔 → PHP 设置 → 安装扩展) - 用
telnet smtp.qq.com 465测试端口连通性(如提示 command not found,先yum install telnet或apt install telnet) - QQ 邮箱/163 邮箱必须用授权码,不是登录密码;Gmail 要开启两步验证再生成 App Password
- 插件里 SMTP 主机填
smtp.qq.com,端口选465(SSL)或587(TLS),别混用
宝塔自带的邮件推送(如登录通知)失败
这是宝塔后端自己的 Python 脚本发信,和网站 PHP 无关。它走的是系统级 sendmail 或直接 SMTP,但默认没配,也不会报明显错误。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 进宝塔 → 设置 → 邮件配置,类型选“SMTP”,填对邮箱、授权码、主机和端口
- 测试按钮经常卡住或无响应?手动执行命令看报错:
/www/server/panel/pyenv/bin/python /www/server/panel/class/mail_main.py send_test - 如果提示
Connection refused,大概率是服务商屏蔽了 25 端口,必须换 465/587 - 阿里云/腾讯云新购服务器默认封 25 端口,且不开放解封,别在这上面浪费时间
发信延迟高或被当垃圾邮件
不是程序问题,是发信身份不被信任。没有 SPF、DKIM、DMARC 记录,又用免费域名或动态 IP,Gmail/QQ 邮箱会直接扔进垃圾箱或排队数小时。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 用真实域名(别用
xxx.123.com这类免费二级域),并配好 DNS:SPF 记录(v=spf1 a mx include:smtp.exmail.qq.com ~all)、DKIM(宝塔邮件插件或 QQ 邮箱后台可生成) - 检查服务器反向解析(PTR 记录)是否指向你的域名,云厂商控制台一般能设置
- 避免用
admin@xxx.com发信,改用no-reply@xxx.com或support@xxx.com,降低被标记风险 - 首次发信别群发,先单发给自己,等几封正常抵达后再逐步加量
真正卡住的地方,往往不在代码里,而在 DNS 记录、云厂商端口策略、邮箱服务商的黑盒规则上。调完 PHP 和 SMTP,记得抬头看一眼域名和服务器本身的“信用分”。



















