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

使用smtplib发送短信异常问题排查求助

故障排查思路

1. 修复邮件格式问题(解决内容为空+收件人显示密送)

你的代码直接把message传给sendmail,但SMTP要求邮件内容必须包含标准邮件头(From、To、Subject等),否则短信网关无法正确解析内容,且邮件客户端会将收件人默认放到密送栏。修改邮件内容格式:

# 构造符合SMTP标准的邮件内容
email_content = f"""From: {EMAIL}
To: {recipient}
Subject: SMS Message

{message}
"""
# 发送时传入构造好的内容
server.sendmail(auth[0], recipient, email_content)

没有正确的邮件头是首次收到空短信的核心原因——网关无法识别纯文本内容为短信正文。

2. 验证Gmail SMTP认证权限

  • 如果你的Gmail账号开启了两步验证,必须使用应用专用密码替代普通密码登录SMTP,普通密码会被拒绝。
  • 若未开启两步验证,需在Google账号设置中开启“不太安全的应用访问”(注意:此选项已逐步淘汰,优先推荐应用专用密码)。
  • 检查密码是否输入正确:你的代码里PASSWORD包含空格,确认是否为实际密码的一部分,还是输入错误。

3. 确认运营商短信网关地址有效性

部分运营商的短信网关已更新:

  • Sprint已并入T-Mobile,原@messaging.sprintpcs.com可能失效,建议改用T-Mobile的网关@tmomail.net测试。
  • 验证手机号+网关的格式是否正确:确保手机号是纯数字(无区号、无特殊字符,如1234567890而非+11234567890,部分网关支持带区号,需测试)。

4. 排查运营商拦截/过滤规则

你直接用邮箱发送也收不到短信,大概率是运营商将你的邮件判定为垃圾信息:

  • 更换一个不同的邮箱账号发送测试,排除当前邮箱被拉黑的可能。
  • 简化短信内容(避免含链接、敏感词),测试基础文本是否能收到。
  • 联系运营商客服,确认是否屏蔽了该类邮件转短信的通道。

5. 完善代码的错误处理与连接管理

  • 代码中未关闭SMTP连接,可能导致后续会话异常,添加server.quit()在发送后:
    server.sendmail(auth[0], recipient, email_content)
    server.quit()
    
  • 添加异常捕获,排查发送过程中的隐藏错误:
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.starttls()
        server.login(auth[0], auth[1])
        # 构造邮件内容并发送
        server.quit()
    except Exception as e:
        print(f"发送失败: {str(e)}")
    

6. 测试邮件发送的基础连通性

  • 先测试用该邮箱给普通邮箱地址发送邮件,确认SMTP服务正常。
  • 若普通邮件能发送,再测试给手机号+网关地址发送,查看收件邮箱的垃圾邮件文件夹,是否被归类为垃圾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:42:12