在AWS上部署的Django应用无法发送Gmail邮件的问题求助
问题描述
我用Django+Apache2开发的Web应用部署到AWS EC2后,通过表单发送邮件时出现500错误,但在python manage.py shell_plus里执行send_mail命令却能成功发送Gmail邮件。本地Ubuntu环境下一切正常。
相关配置与环境信息:
- settings.py邮件配置:
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = "smtp.gmail.com" EMAIL_PORT = 587 EMAIL_HOST_USER = os.environ.get("GMAIL_HOST_USER") EMAIL_HOST_PASSWORD = os.environ.get("GMAIL_HOST_PASSWORD") EMAIL_FROM_EMAIL = os.environ.get("GMAIL_HOST_EMAIL") EMAIL_USE_TLS = True
- EC2入站规则已添加:
port:587 IPv4:0.0.0.0 - 环境版本:Django 4.1.7、Python 3.8.16、Apache 2.4.56、mod_wsgi 4.9.4
修复Gmail发送问题的步骤
1. 同步Apache进程的环境变量
命令行下的shell_plus能读取到邮箱环境变量,但Apache运行Django时可能未加载这些变量:
- 编辑Apache配置文件(如
/etc/httpd/conf/httpd.conf或站点专属配置文件),直接添加环境变量:SetEnv GMAIL_HOST_USER "你的邮箱地址" SetEnv GMAIL_HOST_PASSWORD "你的应用专用密码" SetEnv GMAIL_HOST_EMAIL "发件邮箱地址" - 重启Apache生效:
sudo systemctl restart httpd
2. 检查Gmail安全设置
- 若未启用两步验证,需开启Gmail的"不太安全的应用访问"(但Google已逐步禁用该选项,优先推荐应用专用密码)
- 启用两步验证后,在Google账号后台生成应用专用密码,替换
EMAIL_HOST_PASSWORD的值 - 确认Gmail的IMAP服务已开启:登录Gmail → 「设置」→「转发和POP/IMAP」→ 勾选启用IMAP
3. 补充EC2出站规则
仅配置入站规则不够,EC2需要能向外访问smtp.gmail.com的587端口:
- 进入AWS控制台的EC2安全组,添加出站规则:
- 类型:自定义TCP
- 端口范围:587
- 目标:0.0.0.0/0
4. 排查错误日志定位问题
- 查看Apache错误日志:路径通常为
/var/log/httpd/error_log - 配置Django邮件错误日志(添加到settings.py):
日志会明确显示500错误的具体原因,比如权限不足、变量未加载等。LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'ERROR', 'class': 'logging.FileHandler', 'filename': '/var/log/django/email_error.log', }, }, 'loggers': { 'django.core.mail': { 'handlers': ['file'], 'level': 'ERROR', 'propagate': True, }, }, }
改用Amazon SES的建议
如果Gmail配置问题始终无法解决,推荐改用Amazon SES,更适配AWS环境:
1. 配置步骤
- 在AWS控制台开通SES服务,完成发件邮箱或域名的验证
- 在SES控制台的「SMTP设置」中生成SMTP凭证
- 修改settings.py的邮件配置:
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = "email-smtp.你的区域.amazonaws.com" # 例如us-east-1 EMAIL_PORT = 587 EMAIL_HOST_USER = "SES的SMTP用户名" EMAIL_HOST_PASSWORD = "SES的SMTP密码" EMAIL_FROM_EMAIL = "已验证的发件邮箱" EMAIL_USE_TLS = True
2. 优势
- 与AWS生态深度集成,服务稳定性更高
- 发送量限制更宽松(新账号有初始配额,可申请提升)
- 无需担心Gmail安全策略变更导致服务中断
内容的提问来源于stack exchange,提问作者K-Yuuma
相关产品推荐
相关产品推荐

