如何在运行于AWS ECS Fargate容器的Django中使用AWS SES发送邮件?
在ECS Fargate上用Task Role配置Django SES邮件发送
不需要手动设置EMAIL_HOST_USER和密码,也不用在代码里手动获取凭证注入环境变量——Fargate的Task Role会自动为容器提供临时AWS凭证,Django可以借助AWS SDK自动读取这些凭证来调用SES服务。
具体配置步骤如下:
安装依赖包
首先需要安装boto3和django-ses(或者用Django 3.2+内置的SES后端):pip install boto3 django-ses修改Django配置文件(
settings.py)
替换默认的邮件后端为SES专用后端,可选两种方式:# 方式1:使用django-ses第三方库的后端 EMAIL_BACKEND = 'django_ses.SESBackend' # 方式2:使用Django官方内置的SES后端(仅Django 3.2及以上版本支持) # EMAIL_BACKEND = 'django.core.mail.backends.ses.SESBackend' # 可选:手动指定SES区域(如果自动识别有问题) AWS_SES_REGION_NAME = '你的SES部署区域,比如us-east-1' AWS_SES_REGION_ENDPOINT = 'email.us-east-1.amazonaws.com'确认Task Role权限
你的Task Role已经配置了SES完全访问权限,确保策略中包含ses:SendEmail和ses:SendRawEmail这两个核心权限(完全访问策略默认包含)。测试邮件发送
可以通过Django Shell快速验证:from django.core.mail import send_mail send_mail( '测试邮件标题', '这是通过Fargate Task Role发送的测试内容', '你的SES验证发件邮箱@xxx.com', ['收件邮箱@yyy.com'], fail_silently=False, )
原理说明
Fargate会自动在容器内部设置AWS_CONTAINER_CREDENTIALS_RELATIVE_URI环境变量,boto3(以及依赖它的Django SES后端)会自动读取该变量指向的路径,获取临时的AWS访问凭证,整个过程完全自动,不需要手动配置任何密钥信息。
内容的提问来源于stack exchange,提问作者PhysicusTheoreticus
相关产品推荐
相关产品推荐

