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

Python SMTP报错Connection reset by peer:邮件发送脚本求助

解决Yahoo SMTP脚本的Connection reset by peer错误及代码修复

关键问题与修复步骤:

  • 错误的发送调用:代码中smtp.send_message(message)是错误的,应使用创建的SMTP连接实例server调用send_message方法。
  • Yahoo SMTP认证要求:Yahoo邮箱默认开启两步验证,必须使用应用密码替代普通登录密码才能通过SMTP认证。需在Yahoo账户设置中生成专门的应用密码,替换代码里的randomPassword。
  • 冗余模块清理:既然已切换到EmailMessage,之前导入的MIME相关模块(MIMEText、MIMEImage等)可全部删除,避免冗余。
  • 规范的连接关闭:使用server.quit()替代server.close(),quit()会先向SMTP服务器发送QUIT指令再关闭连接,符合协议规范。
  • 网络与端口检查:确保网络防火墙/代理未阻止465端口的出站连接,若仍有问题,可尝试改用587端口并启用starttls()。

修正后的完整代码:

from email.message import EmailMessage
import smtplib

smtp_server = 'smtp.mail.yahoo.com'
inUsername = input('Enter your email: ')
# 替换为Yahoo账户生成的应用密码
inPassword = 'your_yahoo_app_password'

subject = 'Test'
text = 'Hello this is a text from my computer'
sendingTo = ["recipient@example.com"]

message = EmailMessage()
message['From'] = inUsername
message['To'] = sendingTo
message['Subject'] = subject
message.set_content(text)

server = smtplib.SMTP_SSL(smtp_server, 465)
server.login(inUsername, inPassword)

server.send_message(message)
server.quit()

print('Email sent successfully.')

备选连接方案(587端口+TLS):

若465端口仍报错,可尝试以下方式建立连接:

server = smtplib.SMTP(smtp_server, 587)
server.starttls()  # 启用TLS加密
server.login(inUsername, inPassword)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:24