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

使用Python SMTP发送Gmail时出现超时问题,求排查指导

Gmail SMTP发送邮件超时问题排查

以下是可能导致超时的操作问题及修正方案:

  • 收件人格式错误:代码里recipients是单个字符串,但sendmail要求收件人参数为列表格式,同时', '.join(recipients)也需要列表才能正确拼接。如果传单个字符串,会导致SMTP服务器处理异常,甚至引发超时。
  • 网络端口限制:端口587可能被本地防火墙、路由器或运营商封禁,无法连接Gmail的SMTP服务器。可以切换到465端口(SSL加密),修改代码里的SMTP连接方式。
  • 应用密码配置错误:开启2FA后,应用密码必须是从Google账号正确生成的,生成时要选择「邮件」应用类型,确保密码输入无误。
  • Google账号安全限制:Google可能限制非官方应用的登录请求,即使有应用密码,也需要检查账号是否触发了安全验证,需在Google账号后台确认登录授权。
  • 异常捕获过于宽泛:原代码用except:捕获所有异常,无法看到具体错误信息(比如是超时、认证失败还是格式错误),不利于排查问题。

修正后的代码示例

import smtplib
from email.mime.text import MIMEText

subject = "Email Subject"
body = "This is the body of the text message"
sender = '#####@gmail.com'
recipients = ['####@gmail.com']  # 改为列表格式
password = '######'  # 2FA下的应用密码


def send_email(subject, body, sender, recipients, password):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = sender
    msg['To'] = ', '.join(recipients)
    try:
        # 改用SSL端口465连接
        with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
            smtp_server.login(sender, password)
            smtp_server.sendmail(sender, recipients, msg.as_string())
            print("Message sent!")
    except Exception as e:
        print(f"发送失败: {str(e)}")  # 打印具体错误信息


send_email(subject, body, sender, recipients, password)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:40:01