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

已配置AWS SES的Django项目,如何在Shell中成功发送邮件?

问题排查与解决方案

一、确认本地环境配置正确性

网站能正常发邮件,但本地脚本不行,首先要确认本地加载的Django配置是否和线上一致:

  • 启动shell_plus时打印配置验证:
from django.conf import settings
print(settings.EMAIL_BACKEND)
print(settings.ANYMAIL)

检查输出的EMAIL_BACKEND是否为anymail.backends.amazon_ses.EmailBackend,以及ANYMAIL里的AWS密钥、区域是否和线上配置完全一致。如果本地用了开发环境配置(比如settings_dev.py),需指定生产环境配置启动shell:

python manage.py shell_plus --settings=你的项目名.settings.production

二、排查AWS SES侧的发送问题

即使send_mail返回1,也不代表邮件一定能投递到收件箱,需检查以下点:

  • 沙箱模式限制:如果你的SES账户还在沙箱中,发件人和收件人都必须是已验证的邮箱/域名。确认收件邮箱me@mysite.com是否已在SES中验证(域名验证后,该域名下的邮箱默认允许,但沙箱环境下需确保收件人也是验证过的)。
  • 垃圾邮件文件夹:直接去收件邮箱的垃圾/归档文件夹查找,SES发送的邮件偶尔会被归类为垃圾邮件。
  • SES投递日志:登录AWS控制台进入SES,通过「邮件查询」功能搜索对应邮件,查看投递状态、错误信息(比如拒收、退回原因)。

三、本地终端发送邮件的可行方案

方案1:用指定配置的shell_plus发送

确保加载正确的配置文件后执行发送代码:

# 替换为你的项目配置路径
python manage.py shell_plus --settings=your_project.settings.production

在shell中执行:

from django.core.mail import send_mail

# 打开fail_silently=False,发送失败会抛出异常,方便排查
send_mail("测试邮件", "本地脚本测试内容", "me@mysite.com", ["me@mysite.com"], fail_silently=False)

方案2:编写独立本地脚本

创建send_test_email.py文件,内容如下:

import os
import django

# 设置Django配置模块路径,替换为你的项目实际路径
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings.production")
django.setup()

from django.core.mail import send_mail

try:
    send_mail(
        "本地脚本测试邮件",
        "这是通过本地脚本发送的测试邮件",
        "me@mysite.com",
        ["me@mysite.com"],
        fail_silently=False,
    )
    print("邮件发送请求已提交,请查收")
except Exception as e:
    print(f"发送失败:{str(e)}")

终端执行脚本:

python send_test_email.py

如果发送失败,会直接打印错误信息,帮你快速定位问题(比如密钥无效、权限不足等)。

四、额外注意事项

  • AWS密钥权限:确保本地使用的AWS密钥拥有SES发送权限,可附加AmazonSESFullAccess策略,或更精细的ses:SendEmail、ses:SendRawEmail权限。
  • 网络问题:本地若有代理,可能影响SES API调用,尝试关闭代理后再测试。
  • 发件人地址:必须使用SES已验证域名下的地址作为发件人,不能用未验证的域名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:25:18