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

Django生产环境发送邮件遇[Errno 111]连接拒绝问题求助

解决Django生产环境发送邮件[Errno 111] Connection refused错误

1. 修正配置文件的致命拼写错误

你的settings.py里存在明显拼写错误:EMAIL_HOSTS应改为EMAIL_HOST(多了末尾的s)。Django会因无法识别错误配置而默认尝试连接本地SMTP服务,最终导致生产环境连接拒绝。修正后代码:

EMAIL_HOST = 'smtp.gmail.com'  # 移除末尾多余的s

2. 验证Gmail账号权限配置

使用Gmail作为SMTP服务时,生产环境需满足以下条件:

  • 若账号开启两步验证,必须用应用专用密码替代原密码作为EMAIL_HOST_PASSWORD
  • 未开启两步验证的账号,需在Google账号设置中允许“不太安全的应用访问”(注:该选项目前已被Google逐步移除,优先推荐使用应用专用密码)

3. 排查生产环境网络限制

  • 服务器防火墙/安全组必须允许出站访问smtp.gmail.com的587端口
  • 部分云服务商(如阿里云、AWS)默认限制SMTP出站流量,需在控制台手动解除限制或提交开通申请
  • 可在生产服务器上执行以下命令测试连通性:
telnet smtp.gmail.com 587
# 或使用nc命令
nc -zv smtp.gmail.com 587

若连接失败,说明是网络层面问题,需联系服务器管理员或服务商解决。

4. 确认环境变量加载正确性

你使用config()函数读取环境变量,需确保生产环境的变量配置无误:

  • EMAIL_USE_TLS值为True(587端口要求TLS加密)
  • EMAIL_HOST_USER和EMAIL_HOST_PASSWORD无拼写错误或多余空格

可在生产环境的Django Shell中验证配置:

from django.conf import settings
print(settings.EMAIL_HOST)
print(settings.EMAIL_USE_TLS)
print(settings.EMAIL_HOST_USER)

5. 视图代码优化(非致命但建议修正)

视图中变量名send_mail与Django内置send_mail函数重名,虽不影响功能但易造成混淆,建议修改:

email_message = EmailMessage(mail_subject, message, to=[to_email])
email_message.send()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:08:26