Python使用smtplib连接雅虎日本SMTP 465端口意外断开如何解决
问题原因
- 连接类与端口不匹配:465是SMTP隐式SSL加密专属端口,你使用的
smtplib.SMTP为普通明文SMTP连接类,建立TCP连接后不会主动发起SSL握手,服务器识别到非法请求直接断开连接,这是本次报错的核心原因。 - 雅虎日本邮箱第三方登录规则限制:雅虎日本邮箱默认禁止第三方客户端使用普通账号密码登录,后续登录步骤如果未使用应用专用密码,也会出现鉴权失败报错。
解决方法
方案1:使用SMTP_SSL类适配465端口
直接替换连接类为smtplib.SMTP_SSL,该类会在TCP连接建立后自动完成SSL握手,完全适配465端口的加密要求,示例代码如下:
import smtplib smtp_obj = smtplib.SMTP_SSL("smtp.mail.yahoo.co.jp", 465) # 登录需使用雅虎日本邮箱后台生成的应用专用密码 smtp_obj.login("你的雅虎日本邮箱完整地址", "你的应用专用密码")
方案2:使用587端口+STARTTLS加密
如果要使用smtplib.SMTP类,可以切换为雅虎日本支持的587 STARTTLS端口,连接后手动开启加密再登录,示例代码如下:
import smtplib smtp_obj = smtplib.SMTP("smtp.mail.yahoo.co.jp", 587) # 手动开启STARTTLS加密 smtp_obj.starttls() smtp_obj.login("你的雅虎日本邮箱完整地址", "你的应用专用密码")
补充说明:应用专用密码需要先登录雅虎日本邮箱网页端,在账号安全设置页面生成,普通登录密码无法用于第三方SMTP服务鉴权。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

