PHPMailer表单邮件功能曾正常运行,现突然失效求助
解决PHPMailer表单邮件无法发送的问题
1. 优先排查发送限制相关问题
- 核对邮件服务商配额:多数免费/共享邮件服务(如Gmail、Outlook)有日发送量上限,普通Gmail账号日发送上限约500封,超限后会临时封禁发送权限,一般24小时后自动恢复。
- 查看服务器邮件日志:Linux服务器可查看
/var/log/mail.log或/var/log/exim/mainlog,Windows服务器检查IIS的SMTP日志,日志里会明确标注是否因配额超限被拒绝。 - 检查退信记录:去邮箱的「已发送」「垃圾邮件」或「退信」文件夹查看,若存在退信,里面会有具体限制原因(比如短时间发送大量相似邮件被判定为垃圾邮件)。
2. 启用PHPMailer调试获取具体错误
给你的mail-devis.php加上调试代码,直接定位问题:
// 开启SMTP调试模式 $mail->SMTPDebug = 2; $mail->Debugoutput = 'html'; // 发送时捕获错误信息 if (!$mail->send()) { die("发送失败: " . $mail->ErrorInfo); } else { echo "邮件发送成功"; }
提交表单后,页面会显示详细的SMTP交互日志,能直接看到是连接失败、认证错误还是配额超限。
3. 检查前端JS验证是否阻断提交
打开浏览器开发者工具(F12),切换到「控制台」标签,提交表单时查看是否有JS报错。如果JS验证逻辑出错,会直接阻止表单提交到PHP脚本,看起来像是邮件发不出,但实际PHP根本没收到请求。
4. 排查服务器环境临时变动
- 确认PHP版本:若今早之后服务器升级了PHP,旧版PHPMailer可能不兼容,建议更新PHPMailer到最新稳定版。
- 核对SMTP配置:检查代码里的
$mail->Host、$mail->Port、$mail->SMTPSecure是否正确,比如Gmail的SMTP端口为587(TLS)或465(SSL),服务商偶尔会调整端口。 - 检查端口开放状态:联系主机商确认服务器的25、587、465端口是否被防火墙/安全组封禁。
5. 临时测试验证
换一个不同服务商的邮箱账号配置到PHPMailer中,提交表单测试。如果能正常发送,说明原账号确实存在发送限制问题。
内容的提问来源于stack exchange,提问作者Marielle Nadeau
相关产品推荐
相关产品推荐

