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

使用smtplib发送邮件遭遇ssl.SSLEOFError错误求助

使用smtplib发送Gmail邮件时遭遇SSL错误的解决方法

问题描述

我严格按照教程用smtplib发送邮件,代码如下:

import smtplib
my_email = "XXXX@gmail.com"
password = "YYYY"

connection = smtplib.SMTP("smtp.gmail.com", port=587)
connection.starttls()
connection.login(user=my_email, password=password)
connection.sendmail(from_addr=my_email,to_addrs="VVVV", msg="hello")
connection.close()

运行时一直报错:ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:997),偶尔还会出现其他异常。请问是系统问题吗?

解决方案

  • 替换为应用专用密码:Gmail目前禁止第三方应用使用普通密码登录,需先给账号开启两步验证,然后在Google账号安全设置中生成「应用专用密码」,用这个密码替换代码里的YYYY。
  • 改用SMTP_SSL连接:放弃SMTP+starttls的方式,直接建立SSL加密连接,同时修正邮件格式(必须包含标准邮件头),示例代码:
import smtplib
my_email = "XXXX@gmail.com"
app_password = "你的应用专用密码"

# 使用with语句自动管理连接,无需手动close
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as connection:
    connection.login(my_email, app_password)
    # 邮件必须包含From、To、Subject头,正文和头之间用空行分隔
    msg_content = f"From: {my_email}\nTo: VVVV\nSubject: 测试邮件\n\nhello"
    connection.sendmail(my_email, "VVVV", msg_content)
  • 修正邮件格式:原代码里的msg仅为纯文本内容,不符合SMTP协议要求,服务器会拒绝此类请求,必须添加邮件头信息。
  • 排查网络拦截:如果以上操作无效,检查本地防火墙、代理是否拦截了465或587端口,确保网络能正常访问Gmail的SMTP服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:55:16