Python smtplib发送邮件无报错无错误码但未送达问题求助
Python监控脚本集成SMTP后无法发信排查方案
- 验证发信逻辑触发条件是否命中
多数情况下问题出在内容比对逻辑未触发发信分支,而非发信代码本身出错:- 若使用相对路径读写日志文件,需确认脚本运行时的工作目录和测试时一致,定时任务、容器运行等场景都会默认切换工作目录,导致无法正确读取新旧日志文件,比对逻辑永远返回无变化
- 可在发信逻辑入口处添加
print("进入发信流程")或临时写本地日志,确认分支确实被执行
- 核对SMTP配置参数一致性
对比测试代码和主脚本中的发信参数,重点排查:- 发件人授权码、收件人地址变量是否被其他逻辑覆盖
- SMTP端口、是否开启SSL/TLS的配置是否和测试代码一致,比如测试时用465 SSL端口,集成时误改为25端口却未调用
starttls()方法
- 检查异常捕获是否吞掉报错
若主脚本外层有全局try...except捕获逻辑且未打印异常堆栈,发信时抛出的错误会被直接忽略,无任何报错提示。可在异常捕获块中添加import traceback; traceback.print_exc()打印完整错误信息,或临时注释全局异常捕获复现问题 - 调整SMTP连接生命周期
单独测试时每次运行都会新建SMTP连接,若主脚本中SMTP连接是启动时提前创建的,到触发发信时可能已经被服务端超时断开,导致发信失败无报错。建议将发信逻辑封装为独立函数,每次触发发信时新建连接、发信完成后主动关闭,不要复用全局长连接
内容的提问来源于stack exchange,提问作者Criomby
相关产品推荐
相关产品推荐

