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

已完成django-amazon-ses配置,如何用AWS SES发邮件并接收信号?

别担心,其实django-amazon-ses本质上是替换了Django默认的邮件后端,所以发送邮件的方式和你用Django原生发邮件几乎一样,我给你一步步讲清楚:

一、发送邮件的具体方法

因为django-amazon-ses只是作为Django的邮件后端存在,你完全可以用Django自带的邮件发送API,不需要额外调用这个库的特殊方法:

  • 用send_mail快捷函数(最常用):
from django.core.mail import send_mail

send_mail(
    '这是邮件主题',  # 主题
    '这是纯文本邮件正文',  # 正文
    'sender@example.com',  # 发件人(需要在AWS SES里验证)
    ['recipient@example.com'],  # 收件人列表
    fail_silently=False,  # 是否静默失败,建议设为False方便排查问题
)
  • 用EmailMessage类(更灵活,支持附件、密送等):
from django.core.mail import EmailMessage

email = EmailMessage(
    '邮件主题',
    '纯文本正文',
    'sender@example.com',
    ['recipient1@example.com', 'recipient2@example.com'],
    ['bcc@example.com'],  # 密送地址
    reply_to=['reply@example.com'],  # 回复地址
)
email.send()
  • 发送HTML格式邮件(用EmailMultiAlternatives):
from django.core.mail import EmailMultiAlternatives

subject = 'HTML邮件主题'
text_content = '如果收件人邮箱不支持HTML,会显示这段纯文本内容'
html_content = '<p>这是<b>HTML格式</b>的邮件正文,支持各种样式</p>'
from_email = 'sender@example.com'
to = ['recipient@example.com']

msg = EmailMultiAlternatives(subject, text_content, from_email, to)
msg.attach_alternative(html_content, "text/html")  # 添加HTML内容
msg.send()
二、接收pre_send和post_send信号

django-amazon-ses提供的这两个信号,分别在邮件发送前和发送后触发,你需要写信号接收器来捕获并处理它们:

  1. 先在你的app目录下创建signals.py文件,编写接收器函数:
from django.dispatch import receiver
from django_amazon_ses.signals import pre_send, post_send

# 捕获pre_send信号:邮件即将发送时触发
@receiver(pre_send)
def handle_pre_send(sender, message, **kwargs):
    # 这里可以做预处理,比如记录发送日志、修改邮件内容等
    print(f"准备发送邮件到:{', '.join(message.to)}")
    print(f"邮件主题:{message.subject}")

# 捕获post_send信号:邮件发送完成后触发
@receiver(post_send)
def handle_post_send(sender, message, response, **kwargs):
    # response是AWS SES返回的响应数据,可用于判断发送状态
    print(f"邮件发送结果:{response}")
    # 比如可以在这里记录发送成功/失败的日志,或者处理失败回调
  1. 让Django加载这个信号模块,修改app的apps.py文件:
from django.apps import AppConfig

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'your_app_name'  # 替换成你的app名称

    def ready(self):
        import your_app_name.signals  # 导入信号模块
  1. 最后在settings.py的INSTALLED_APPS里,把你的app替换成上面的配置类:
INSTALLED_APPS = [
    # ... 其他app
    'your_app_name.apps.YourAppConfig',  # 替换原来的'your_app_name'
    # ...
]
三、主题、正文等内容的配置

这些内容不需要在django-amazon-ses的配置里单独设置,完全是在你调用Django邮件API的时候通过参数指定的,就像上面例子里的subject、message/body参数。

另外要注意两个关键点:

  • 发件人邮箱必须是在AWS SES中验证过的(如果你的AWS账户还在沙盒模式);如果已经通过生产访问权限,就不需要单个验证邮箱
  • 如果设置fail_silently=False,发送失败时会抛出异常,你可以捕获这些异常来处理错误情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:24:47