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

