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

使用Python+AWS SES发送邮件无报错但未送达,求排查帮助

Django AWS SES邮件发送成功但未送达排查方案

1. 检查AWS SES账户状态

  • 新注册的AWS SES账户默认处于沙盒模式,仅允许向已在SES控制台验证过的邮箱/域名发送邮件,先确认收件邮箱是否完成验证
  • 发件邮箱AWS_SES_SENDER_MAIL必须是SES中已验证的身份,核对配置值与SES控制台的验证记录是否一致

2. 验证环境变量与权限配置

  • 打印或通过Django Shell输出AWS_ACCESS_KEY、AWS_KEY_ID、AWS_SES_REGION等变量,确认环境变量是否正确加载
  • 检查IAM用户权限:必须拥有ses:SendEmail或ses:SendRawEmail权限,且无额外限制策略

3. 排查邮件内容与收件方拦截

  • 当前使用纯文本邮件,检查是否包含特殊字符、敏感内容导致被收件方反垃圾系统拦截,可先发送极简内容(如"Test Email")测试
  • 确认收件邮箱是否将发件地址归入垃圾邮件箱,检查垃圾箱或反垃圾设置

4. 查看AWS SES官方日志

  • 登录AWS控制台进入SES服务,查看发送统计和邮件活动面板,里面会显示邮件的具体状态(已投递、被退回、被拒绝等)
  • 退信记录会明确标注失败原因(如收件地址无效、域名拒收、SPF/DKIM配置问题等)

5. 验证Django SES后端配置

  • 确认django-amazon-ses包版本与当前Django版本兼容,过时版本可能存在隐性bug
  • 尝试替换为Django原生SMTP后端测试,排除第三方包问题:
    # settings.py 临时配置
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = f'email-smtp.{AWS_SES_REGION}.amazonaws.com'
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    EMAIL_HOST_USER = AWS_KEY_ID
    EMAIL_HOST_PASSWORD = AWS_ACCESS_KEY
    DEFAULT_FROM_EMAIL = AWS_SES_SENDER_MAIL
    

6. 本地Shell测试发送逻辑

  • 在Django Shell中手动执行发送代码,查看是否有隐藏错误(接口无报错但Shell可能输出更详细日志):
    from django.core.mail import send_mail
    from django.conf import settings
    
    send_mail(
        "Test Subject",
        "Test Message",
        settings.AWS_SES_SENDER_MAIL,
        ["your-test-email@example.com"],
        fail_silently=False
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:59:55