LECMS邮件发送失败如何排查
照着这篇排查一遍,你基本能自己定位 LECMS 邮件发不出去的真正原因,而不是反复改后台密码试运气。
LECMS 发邮件走的是 SMTP,链路是「后台配置 → PHP 的 PHPMailer 组件 → 服务器网络 → 收件方服务器」。这条链上任何一环断了都会表现成同一句话:“发送失败”。所以排查思路是从后端往前端倒着查,先拿到真实报错,再逐段验证。
第一步:先拿到真实报错信息,别猜
这一步的目标是把“发送失败”换成一句具体的技术报错,比如 SMTP connect() failed 或 Could not authenticate。
进入 LECMS 后台 → 系统 → 系统设置 → 邮件设置,把配置填好后点「发送测试邮件」。如果只弹一个笼统的失败提示,就去服务器上找日志:
- LECMS 的运行日志一般在
runtime/log/目录下(按日期分文件),搜关键字mail、smtp、PHPMailer。 - 如果 runtime 目录下没有,检查
config/或application/下的邮件配置文件是否开启了调试开关,把debug设为true再测一次。
注意:ThinkPHP 系的老版本 LECMS 默认把异常吞掉只返回 false,不开 debug 你永远看不到原因。测完记得关掉。
第二步:逐项核对后台邮件参数
这一步是把配置错误排除掉,80% 的失败都出在这里。后台「邮件设置」里通常有这几项,对照你的邮箱服务商官方文档逐字核对:
| 参数 | 常见正确值 |
|---|---|
| SMTP 服务器 | smtp.qq.com / smtp.163.com / smtp.exmail.qq.com |
| 端口 | 465(SSL)或 587(TLS) |
| 加密方式 | SSL 对应 465,TLS 对应 587,别混搭 |
| 发件邮箱 | 必须和 SMTP 账号完全一致 |
| 密码 | 企业邮/QQ邮箱这里是「授权码」,不是登录密码 |
| 发件人名称 | 任意中文即可,但别含特殊符号 |
注意:腾讯、网易系邮箱必须先在网页版邮箱 → 设置 → 账户 里开启「SMTP 服务」,系统会给你一串 16 位授权码,用登录密码必然认证失败。
第三步:直接在服务器上测 SMTP 通不通
这一步用来区分「是 LECMS 的问题」还是「服务器网络的问题」。SSH 登录服务器执行:
openssl s_client -connect smtp.qq.com:465 -crlf
# 测 587 端口
telnet smtp.qq.com 587
能连上会返回 220 开头的欢迎语;卡住不动或提示 Connection refused / Connection timed out,说明网络层就断了,跟 LECMS 无关,看第四步。
第四步:处理端口封锁和 PHP 环境限制
这一步解决「服务器连不上 SMTP」的两种情况。
情况一:25 端口被封。 阿里云、腾讯云等厂商默认封禁出方向 25 端口,防垃圾邮件。所以后台端口千万别填 25,改用 465 或 587。
情况二:PHP 缺扩展或被禁用函数。 执行 php -m | grep -i openssl,如果没有输出,说明 openssl 扩展没装,SSL 加密根本走不通。宝塔面板的话,进「软件商店 → PHP 7.x → 设置 → 安装扩展」勾选 openssl 安装即可。
再检查 php.ini 里的 disable_functions,如果里面列了 fsockopen、stream_socket_client、curl_exec,把它们删掉再重启 PHP。
第五步:确认邮件是不是其实发出去了
这一步排除「发送成功但没收到」的假失败。用一个 Gmail 或 QQ 邮箱收件,然后:
- 看垃圾邮件文件夹。自建域名发信没有 SPF 记录,几乎必进垃圾箱。
- 去发件邮箱的「已发送」里看有没有记录。有记录 = LECMS 发送成功,问题在收件方或域名信誉,去 DNS 加一条 SPF 记录:
v=spf1 include:spf.mail.qq.com ~all。 - 如果连已发送都没有,回到第三步继续查。
注意:测试时不要用同一个邮箱给自己发,容易被判定为自环邮件丢弃;也不要短时间内连发十几封,QQ 邮箱会临时限制 IP。
第六步:检查业务逻辑层面的触发条件
如果测试邮件能发、注册验证码发不出,问题在业务代码。检查后台「用户设置」里验证码邮件开关是否开启、是否设置了发送频率限制(如 60 秒一次),以及收件人邮箱格式有没有多空格或全角字符。
小结
- 先开 debug 拿到真实报错,别对着「发送失败」四个字瞎改。
- 后台四项必查:服务器地址、端口与加密方式匹配、发件邮箱=SMTP 账号、密码用授权码。
- 用
openssl s_client和telnet判断是 LECMS 问题还是服务器网络问题。 - 云服务器基本都封 25 端口,一律改用 465/587。
- PHP 的 openssl 扩展没装,SSL 加密必然失败。
- 测试邮件能发但收不到,优先查垃圾箱和 SPF 记录,不是 LECMS 的锅。
原文链接:https://www.gj0.com/thread-982.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。