You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python EmailMessage与smtplib发送邮件未收到问题求助

排查方案:邮件发送成功但收件方未收到

核心问题分析

从SMTP日志来看,所有交互步骤均返回2xx成功状态,说明邮件已被发件SMTP服务器(hostmonster)接受,但在后续路由到收件方邮箱的过程中被拦截或丢弃,问题并非出在代码执行层面。以下是针对性排查步骤:

1. 修复邮件头缺失的To字段

你的代码中EmailMessage对象仅设置了From和Subject,未添加To字段。虽然send_message方法传递了to_addrs参数,但邮件本身的头部缺少收件人信息,部分邮件服务商(如Gmail)会将此类不规范邮件直接拦截。

修改代码:

emsg = EmailMessage()
emsg.set_content(msg)
emsg['Subject'] = Subject
emsg['From'] = from_addr
emsg['To'] = To  # 新增这一行

2. 校验发件域名的SPF/DKIM/DMARC记录

绝大多数主流邮箱服务商(Gmail、Outlook等)会严格校验发件域名的邮件认证记录,缺少或不正确的记录会导致邮件被直接拦截:

  • SPF记录:确认发件域名(*****.com)的SPF记录包含hostmonster的SMTP服务器IP或域名,证明该服务器有权限发送此域名的邮件。
  • DKIM/DMARC:未配置DKIM签名和DMARC规则会大幅提升邮件被拦截的概率,可登录域名管理后台补充配置。

3. 查看发件服务商的邮件队列与退信记录

客户端日志显示发送成功,但hostmonster可能在后续路由时收到收件方的拒收通知,这类信息不会返回给客户端,需要登录hostmonster的邮件管理后台:

  • 检查发件队列是否有滞留邮件
  • 查看退信日志,确认是否存在收件方服务器的拒收提示(如“SPF校验失败”“域名未认证”等)

4. 测试同域名收件地址

尝试发送邮件到与发件地址同域名的邮箱(如xxx@*****.com),如果能正常收到,说明问题集中在跨域名的邮件认证环节,进一步指向SPF/DKIM/DMARC配置问题。

5. 检查邮件内容与发送频率

  • 若邮件内容过于简洁、重复发送相同内容,可能被判定为垃圾邮件(部分服务商直接静默丢弃,不进入垃圾邮件文件夹)
  • 尝试发送包含更多信息的测试邮件(如添加签名、换行、不同主题),观察是否能正常接收

代码额外优化点

异常捕获存在语法错误:except smtplib as e应改为except smtplib.SMTPException as e,否则无法正确捕获SMTP相关异常。


内容的提问来源于stack exchange,提问作者gprade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:04:59