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

Django3.2.23+Python3.12.1配置SMTP报错:starttls()含未知参数keyfile

问题原因

Django 3.2.23属于旧版本,不兼容Python 3.12。Python 3.12对标准库smtplib.SMTP.starttls()方法做了变更,移除了keyfile和certfile这两个参数,但Django 3.2的SMTP邮件后端仍在调用该方法时传递这两个参数,导致触发TypeError。

解决方法

方案1:版本适配(推荐)

选项A:升级Django到兼容Python 3.12的版本

Django 4.2.x及以上版本支持Python 3.12,建议升级到4.2 LTS版本(长期支持,稳定性高):

pip install django==4.2.*

升级后需检查项目中第三方依赖是否兼容新版本Django,避免出现其他兼容性问题。

选项B:降级Python到Django 3.2支持的版本

Django 3.2官方支持Python 3.6至3.11,将Python降级到3.11.x版本,即可解决版本不兼容问题,无需修改现有邮件配置代码。

方案2:临时修改Django源码(不推荐长期使用)

找到Python环境中Django的smtp.py文件(路径通常为lib/python3.12/site-packages/django/core/mail/backends/smtp.py),定位到报错的第67行左右的starttls调用,移除keyfile和certfile参数:
原代码类似:

self.connection.starttls(keyfile=self.ssl_keyfile, certfile=self.ssl_certfile)

修改为:

self.connection.starttls()

注意:该方法仅作为临时 workaround,后续更新Django时会被覆盖,且可能引入其他未知问题,仅在无法升级/降级版本时临时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:59:58