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

Nginx+uWSGI环境下Django密码重置邮件写入日志未发送问题

解决Django密码重置邮件仅输出到uWSGI日志而未实际发送的问题

看起来你的邮件配置有几个关键细节没匹配上,导致Django没有真正通过SMTP服务器发送邮件,而是 fallback 到了控制台输出(也就是你在uwsgi.log里看到的内容)。咱们一步步来修正:

1. 修正SMTP端口与加密方式的匹配

你当前配置的EMAIL_PORT = 465和EMAIL_USE_TLS = True是冲突的:

  • 端口465对应的是SSL加密,需要设置EMAIL_USE_SSL = True
  • 端口587对应的才是TLS加密,用EMAIL_USE_TLS = True

修改你的local_settings.py:

# 如果你想用465端口(SSL)
EMAIL_PORT = 465
EMAIL_USE_SSL = True  # 替换原来的EMAIL_USE_TLS = True

# 或者如果你想用587端口(TLS),改成下面这样:
# EMAIL_PORT = 587
# EMAIL_USE_TLS = True

2. 设置一致的发件人地址

从uWSGI日志里能看到邮件的发件人是webmaster@localhost,这和你配置的EMAIL_HOST_USER = 'support@mydomain.com'不一致。大多数SMTP服务器会拒绝这种发件人不匹配的请求,所以需要添加以下配置:

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER  # 让所有邮件默认用你的支持邮箱发件
SERVER_EMAIL = EMAIL_HOST_USER        # 管理员相关的系统邮件也用这个地址

3. 直接测试SMTP连接

为了确认配置是否生效,你可以在Django shell里手动发送测试邮件,这样能直接看到错误信息:
首先进入shell:

python manage.py shell

然后执行测试代码:

from django.core.mail import send_mail
send_mail(
    '测试邮件',
    '这是一封测试邮件,用于验证SMTP配置',
    'support@mydomain.com',
    ['你的测试邮箱地址@example.com'],
    fail_silently=False,
)

如果配置有问题(比如密码错误、端口不通、SMTP服务器拒绝连接),这里会直接抛出异常,帮你快速定位问题。

4. 检查服务器网络/防火墙设置

确保你的Ubuntu服务器允许出站连接到SMTP服务器的465或587端口。有些云服务商或主机商会默认封锁这些邮件端口,需要在防火墙规则里开放对应的端口(比如用ufw allow 465/tcp)。

调整完这些配置后,重启uWSGI和Nginx服务,再测试密码重置功能,应该就能正常收到邮件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:43:58