Django邮件突然无法发送问题排查求助
问题分析与解决方案
先排查配置中的明显问题
你的settings.py里配置了EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend',这个后端的作用是仅将邮件内容输出到服务器控制台,不会实际发送到目标邮箱。如果之前系统能正常发邮件,大概率是这个配置被意外修改了,替换成实际发送邮件的SMTP后端即可:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
版本过时的可能性验证
另一台服务器用相同配置能正常发送,说明核心配置没问题,版本过时的概率较低,但可按以下步骤确认:
- 对比两台服务器的Django版本:执行
python -m django --version,若当前服务器Django版本过低(比如低于2.2),可能和SMTP服务商的安全协议不兼容,建议升级到3.2或4.x的稳定版本。 - 同步依赖版本:执行
pip list查看当前服务器的依赖库版本,确保和正常服务器的django等核心依赖版本一致。
其他排查与解决方向
1. 服务器网络与端口限制
当前服务器的465端口(SSL)可能被防火墙、安全组或服务商封禁,执行以下命令测试SMTP连接:
# 测试端口连通性 telnet smtp.myemailprovider.com 465 # 测试SSL连接 openssl s_client -connect smtp.myemailprovider.com:465
若连接失败,联系服务商开放对应端口,或调整服务器防火墙规则。
2. 查看Gunicorn错误日志
邮件发送失败的具体错误信息会输出到Gunicorn日志中(通常路径为/var/log/gunicorn/或自定义日志目录),根据日志提示定位问题(比如认证失败、连接超时等)。
3. 修正发件人配置
你的send_mail调用中第三个参数是空字符串'',部分SMTP服务商要求发件人必须和EMAIL_HOST_USER一致,建议修改为:
send_mail( 'Test title', 'Test Email.', settings.EMAIL_HOST_USER, # 使用配置的邮箱作为发件人 ['my@mail.com'], fail_silently=False, )
4. 排查IP或认证限制
虽然另一台服务器能正常发送,但当前服务器IP可能被SMTP服务商临时限制(比如触发反垃圾机制),或者存在旧密码缓存,可尝试重置EMAIL_HOST_PASSWORD,或联系服务商解除IP限制。
5. 排除Nginx干扰
Nginx作为反向代理一般不影响邮件发送,但需确认服务器上的Nginx规则或配套防火墙没有阻断出站的465端口流量。
内容的提问来源于stack exchange,提问作者FLYAX
相关产品推荐
相关产品推荐

