使用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
相关产品推荐
相关产品推荐

