Windows下使用Python smtplib通过Gmail SMTP发信报SSL证书验证错误
这个报错是因为Python的SSL模块没有正确加载到Gmail SMTP服务器证书对应的根颁发机构证书,Windows环境下通常是默认SSL上下文没有正确关联可信证书库导致的。
可行解决方案
方案1(推荐,无安全风险)
显式指定SSL上下文加载certifi提供的可信证书包,修改代码如下:
import ssl import smtplib import certifi # 显式传入certifi的证书路径创建上下文 context = ssl.create_default_context(cafile=certifi.where()) server = smtplib.SMTP("smtp.gmail.com", 587) server.starttls(context=context)
如果运行提示找不到certifi模块,先执行pip install certifi安装即可。
方案2(方案1无效时使用)
同步更新Windows系统的受信任根证书:
- 按下Win+X选择「Windows终端(管理员)」或者「命令提示符(管理员)」
- 执行命令:
certutil -syncwithWU root - 等待命令执行完成后重启Python脚本再测试
方案3(仅临时测试使用,生产环境禁止使用)
如果只是临时调试,可以跳过SSL证书验证,修改代码如下:
import ssl import smtplib # 跳过证书验证,存在中间人攻击风险,仅可用于测试 context = ssl._create_unverified_context() server = smtplib.SMTP("smtp.gmail.com", 587) server.starttls(context=context)
内容的提问来源于stack exchange,提问作者geekygeek
相关产品推荐
相关产品推荐

