使用Django发送邮件持续出现SMTPConnectError报错如何排查
Django 实现邮件功能报 SMTPConnectError 修复方案
SMTPConnectError 是连接SMTP服务器阶段触发的错误,和账号密码校验、邮件内容逻辑无关,按以下顺序排查即可解决:
- 核对SMTP配置的端口与加密方式匹配关系
两类通用配置组合不要搞混,两个加密参数不可同时设为True:- 465端口:必须搭配
EMAIL_USE_SSL = True - 587端口:必须搭配
EMAIL_USE_TLS = True
同时确认EMAIL_HOST填写正确,比如QQ邮箱对应smtp.qq.com、163邮箱对应smtp.163.com、Gmail对应smtp.gmail.com,不要混用不同服务商的SMTP地址。
可参考的正确配置模板:
# settings.py 邮件配置参考 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = '替换为你用的邮箱SMTP地址' EMAIL_PORT = 465 EMAIL_USE_SSL = True EMAIL_HOST_USER = '你的完整发信邮箱地址' EMAIL_HOST_PASSWORD = '邮箱SMTP服务授权码' # 注意不是邮箱日常登录密码 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER - 465端口:必须搭配
- 验证本地到SMTP服务器的网络连通性
在运行Django服务的机器上执行端口连通性测试,替换为你配置的HOST和PORT值:
如果telnet连接直接失败,说明是本地防火墙、公司网络策略、云服务器安全组拦截了对应出站端口,先放通规则再测试。telnet 你配置的EMAIL_HOST 你配置的EMAIL_PORT - 确认邮箱侧SMTP服务已开启
主流公共邮箱默认关闭SMTP发信权限,需要先登录邮箱网页端,在账号安全/设置页面找到SMTP服务选项,手动开启服务后生成专属授权码,将配置里的EMAIL_HOST_PASSWORD替换为该授权码,不要使用邮箱登录密码。 - 排除视图层代码逻辑问题
暂时将邮件后端切换为控制台模式,启动服务触发送信逻辑,如果控制台能正常打印出邮件完整内容,说明views.py里的发信逻辑没有问题,故障点完全在SMTP配置或网络层:# 调试用配置,邮件不会实际发出,直接打印在控制台 EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
内容的提问来源于stack exchange,提问作者Precious Imoniakemu
相关产品推荐
相关产品推荐

