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

django-ses模块连接超时:使用django.core.mail发送邮件失败

解决django-ses连接AWS SES超时问题

问题原因

你使用的django_ses.SESBackend是通过AWS SES REST API发送邮件,而非SMTP协议,但你配置的AWS_SES_REGION_ENDPOINT是SMTP服务的地址,导致botocore尝试通过HTTPS连接SMTP端口,最终超时。而你直接用smtplib是走SMTP协议,所以能正常发送。

解决方案一:修正django-ses API模式配置

修改settings.py中的配置,使用SES API的正确endpoint,移除无效的AWS_SES_USER配置(django-ses中无此参数):

EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_SES_ACCESS_KEY_ID = '-my-access-key-'
AWS_SES_SECRET_ACCESS_KEY = '-my-secret-access-key-'
AWS_SES_REGION_NAME = 'eu-central-1'
# 替换为SES API的endpoint,而非SMTP地址
AWS_SES_REGION_ENDPOINT = 'email.eu-central-1.amazonaws.com'
# 可选:设置默认发件人,调用时也可手动指定from_email
AWS_SES_FROM_EMAIL = 'my-verified@email'

调用代码保持不变即可:

from django.core.mail import EmailMessage

email = EmailMessage(subject, message, from_email='my-verified@email', recipient_list)
email.content_subtype = 'html'
email.send()

解决方案二:改用Django原生SMTP后端

如果你更倾向于用SMTP协议(和你测试的smtplib方式一致),可以直接使用Django自带的SMTP后端,无需依赖django-ses:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email-smtp.eu-central-1.amazonaws.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '-my-access-key-'
EMAIL_HOST_PASSWORD = '-my-secret-access-key-'
DEFAULT_FROM_EMAIL = 'my-verified@email'

调用代码同样保持不变,Django会自动通过SMTP发送邮件。

额外检查点

  • 确认你的AWS IAM用户拥有ses:SendEmail或ses:SendRawEmail权限(API模式需要)
  • 确认服务器网络可以访问AWS SES的API端口(443)或SMTP端口(587/465),无防火墙/代理拦截

内容的提问来源于stack exchange,提问作者Domenico Spidy Tamburro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:40:35