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

使用Python发送邮件报错:smtplib.SMTPServerDisconnected连接意外关闭

解决Yahoo SMTP发送邮件时Connection unexpectedly closed错误

核心问题分析

你遇到的断开连接错误,主要原因是**sendmail参数使用错误**,以及邮件内容不符合SMTP协议规范,导致服务器拒绝请求并断开连接。另外需确认Yahoo账号的认证方式是否正确。

具体修复步骤

  • 修正sendmail调用格式:smtplib.SMTP.sendmail()的第三个参数是完整的邮件内容(包含所有邮件头和正文),不能分开传Subject和message。当前写法会导致请求格式非法,触发服务器断开。
  • 构建标准邮件内容:必须包含From、To、Subject等邮件头,头信息和正文之间用空行分隔(SMTP协议强制要求)。
  • 使用Yahoo应用密码:如果账号开启了两步验证,必须使用应用专用密码登录,而非普通账号密码;即使没开两步验证,也建议尝试应用密码——Yahoo对SMTP登录的普通密码限制较多。

修复后的完整代码

import smtplib
import ssl

port = 465  # Yahoo SSL端口
smtp_server = "smtp.mail.yahoo.com"
sender_email = "c.junction@yahoo.com"
# 注意:开启两步验证时,此处需填写应用专用密码
password = input("Type your password and press enter:")
receiver_email = "jawoneb660@jobsfeel.com"

# 构建符合SMTP标准的邮件内容
message = f"""\
From: {sender_email}
To: {receiver_email}
Subject: Hi there

Hello World!!!
This message is sent from Python."""

context = ssl.create_default_context()

with smtplib.SMTP_SSL(smtp_server, port, context=context) as smtp:
    smtp.login(sender_email, password)
    # 正确调用sendmail:仅三个参数,第三个为完整邮件内容
    smtp.sendmail(sender_email, receiver_email, message)

额外排查点

  • 确认防火墙或代理没有拦截465端口的出站连接。
  • 检查Yahoo账号的SMTP服务是否被禁用(可在账号设置的“邮件选项”中确认)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:33:23