type
status
date
slug
summary
tags
category
icon
password
Django 4.2之后, 默认的
EmailBackend添加了对hostname和certificates的校验,可能导致出现ssl相关的错误。📝 遇到问题
之前公司的项目一直使用的是Django 4.0版本。几天前,同事将Django版本升级到了4.2。部署到生产环境后就发现不能发送邮件。我们的邮件服务是自己搭建的,SMTP后端使用的Django默认的
EmailBackend。首先我们在日志系统中找到了报错信息:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)以为邮件服务的证书过期了,接着去更新了证书,结果仍然出现报错:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issue (_ssl.c:997网上一查资料,才发先是Django版本升级造成的问题:

🤗 解决方案
解决方案有很多,比如在使用
EmailBackend的时候传递服务器证书,使用自定义的EmailBackend等。但由于我们的项目是Saas系统,支持客户自行定义邮件服务器。因此选择了最简单的方法:使用自定义的EmailBackend.- 首先创建一个自定义的
EmailBackend
- 然后在
settings.py中配置自定义的EmailBackend
完美解决😁
- 作者:Jamessen
- 链接:/about/article/djangomail
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
