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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:08:25