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

Python 3.10调用Yahoo SMTP发信报错SMTPServerDisconnected求助

问题原因

该报错和Python版本、运行环境无关,是Yahoo邮箱的安全策略限制导致:

2020年之后Yahoo官方全面禁止第三方应用/客户端直接使用账号主密码登录SMTP、POP3、IMAP服务,即使主密码输入正确也会判定为非法登录,多次尝试后会触发临时风控,返回535 5.7.0 (#AUTH005) Too many bad auth attempts错误并主动断开连接。

解决步骤
  • 首先暂停所有测试请求1-2小时,当前已经触发临时登录限制,频繁尝试会延长封禁时间。
  • 登录Yahoo账号网页端,进入账号安全设置,开启两步验证(2FA),这是生成应用专用密码的强制前提。
  • 在账号安全页找到「应用密码」入口,选择自定义应用类型,任意命名(例如Python SMTP),系统会生成一个16位无空格的专用密码,仅在生成时展示一次,注意留存。
  • 将代码中smtp.login方法的第二个参数,从原来的账号主密码替换为上述生成的16位应用专用密码即可。
修改后代码示例

仅需修改登录行,其余逻辑无需调整:

import smtplib
from email.message import EmailMessage

email = EmailMessage()

email['from'] = 'PM'
email['to'] = 'someone@gmail.com'
email['subject'] = 'Test text'

email.set_content('Once upon a time ......')

with smtplib.SMTP(host = 'smtp.mail.yahoo.com', port = 587) as smtp:
    smtp.set_debuglevel(1)
    smtp.ehlo()
    smtp.starttls()
    # 仅修改此处密码为生成的16位应用专用密码
    smtp.login('another@yahoo.com' , 'xxxxxxxxxxxxxxxx')
    smtp.send_message(email)
    print('Done!')
注意事项
  • 应用专用密码丢失可以直接重新生成,无需修改账号主密码。
  • 若修改后仍报错,先在Yahoo网页端查看安全告警,确认所有陌生登录提示为本人操作,解除账号临时限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:39:04