Amazon Simple Email Service的Django电子邮件后端,由celery支持。
项目描述
- 信息:
Amazon Simple Email Service的Django电子邮件后端,由django-celery支持。
- 灵感来源于:
Harry Marr的django-ses。
- 状态:
- 未维护。如果您想接手,请告诉我们!
概述
Sea Cucumber是Django的邮件后端。Sea Cucumber通过Amazon Web Services的Simple Email Service (SES)和django-celery路由电子邮件,而不是通过传统的SMTP邮件服务器发送电子邮件。
为什么选择Sea Cucumber/SES而不是SMTP?
配置、维护和处理一些复杂边缘情况可能会耗费时间。如果您
不想维护邮件服务器。
您的邮件服务器速度慢或不稳定,阻碍了视图的渲染。
您需要发送大量电子邮件。
您不想担心PTR记录、反向DNS、电子邮件白名单/黑名单服务。
您已经在EC2上部署(SES到EC2实例的入站流量是免费的)。这并不是什么大问题,但如果您在AWS上,这将是一个额外的优势。
安装
假设您已安装了Django和django-celery,您需要安装Boto 2.0b4或更高版本。boto是一个Python库,用于包装AWS API。
以下操作可安装boto 2.0b4(我们在这里使用–upgrade以确保您获得2.0b4)
pip install --upgrade boto
安装海参
pip install seacucumber
将以下内容添加到您的settings.py文件中
EMAIL_BACKEND = 'seacucumber.backend.SESBackend' # These are optional -- if they're set as environment variables they won't # need to be set here as well AWS_ACCESS_KEY_ID = 'YOUR-ACCESS-KEY-ID' AWS_SECRET_ACCESS_KEY = 'YOUR-SECRET-ACCESS-KEY' # Make sure to do this if you want the ``ses_address`` management command. INSTALLED_APPS = ( ... 'seacucumber' )
电子邮件地址验证
在您可以通过SES发送电子邮件“来自”电子邮件地址之前,您必须首先验证对该地址的所有权
./manage.py ses_address verify batman@gotham.gov
在您完成上述验证后,您需要检查电子邮件账户的收件箱(通过您的邮件客户端或提供者的Web界面)并点击亚马逊发送给您的授权链接。之后,您的地址就准备好了。
要确认已验证的电子邮件地址已准备好使用
./manage.py ses_address list
要删除以前验证的地址
./manage.py ses_address delete batman@gotham.gov
现在,当您从已验证的电子邮件地址使用django.core.mail.send_mail时,海参将处理消息投递。
速率限制
如果您是新的SES用户,您的默认配额将是24小时内最多1,000封电子邮件,每秒最多一封。海参默认在celery级别强制执行每秒一封电子邮件,但您必须没有禁用celery速率限制。
如果您有这个
CELERY_DISABLE_RATE_LIMITS = True
改为这个
CELERY_DISABLE_RATE_LIMITS = False
然后运行以下命令以检查您的SES最大速率
./manage.py ses_usage
如果您的速率限制超过1.0/sec,您需要将此数值设置在您的CUCUMBER_RATE_LIMIT设置中,如下所示
# Rate limit to three outgoing SES emails a second. CUCUMBER_RATE_LIMIT = 3
未能遵守速率限制可能会导致BotoServerError异常被抛出,这将使celery不高兴。
一般而言,随着使用量的增加,您的配额和最大发送速率将增加,因此请在发送了一些电子邮件之后,在稍后的日期再次检查ses_usage管理命令。您需要手动在settings.py中调整速率设置。
任务路由
如果您想将海参任务路由到不同的队列。
将此内容添加到设置中
CUCUMBER_ROUTE_QUEUE = 'YOUR-ROUTE-QUEUE'
然后更新celery配置的routes。例如celeryconfig.py
CELERY_ROUTES = { 'seacucumber.tasks.#': {'queue': 'YOUR-ROUTE-QUEUE'}, }
DKIM
使用DomainKeys是完全可选的,然而亚马逊推荐使用它来验证您的电子邮件地址并提高邮件的投递成功率。请参阅http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/DKIM.html。除了认证外,您还可能想考虑使用DKIM以消除显示给Gmail用户的“via email-bounces.amazonses.com”消息 - 请参阅http://support.google.com/mail/bin/answer.py?hl=en&answer=1311182。
要启用DKIM签名,您应安装pydkim包并指定DKIM_PRIVATE_KEY和DKIM_DOMAIN设置的值。您可以使用如openssl genrsa 1024之类的命令生成私钥,并使用openssl rsa -pubout <private.key获取公钥部分。如果您的域是example.com,则公钥应发布到ses._domainkey.example.com。您可以通过更改DKIM_SELECTOR设置来使用不同于ses的名称。
SES中继将修改电子邮件头,如Date和Message-Id,因此默认情况下,只有From、To、Cc、Subject头被签名,而不是完整的头集合。这对大多数DKIM验证器来说已经足够了,但可以通过DKIM_HEADERS设置来覆盖。
示例settings.py
DKIM_DOMAIN = 'example.com' DKIM_PRIVATE_KEY = ''' -----BEGIN RSA PRIVATE KEY----- xxxxxxxxxxx -----END RSA PRIVATE KEY----- '''
使用 boto 发布到 Route53 的示例 DNS 记录
route53 add_record ZONEID ses._domainkey.example.com. TXT ‘“v=DKIM1; p=xxx”’ 86400
Django 内置错误电子邮件
如果您希望 Django 的内置错误电子邮件报告功能正常(实际上发送有效的电子邮件),您需要明确设置 SERVER_EMAIL 设置为您的 SES-验证地址之一。否则,您的错误电子邮件都会失败,您将 blissfully 无知于问题。
注意: 您可以使用包含的 ses_address 管理命令来处理地址验证。
获取帮助
如果您有任何问题,请随时将它们发布到我们的 问题跟踪器。
项目详情
seacucumber-1.5.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 186c3792192fdd35c2392da55fad64b4b14c875cccec4c68f3fe317fbf3feadb |
|
MD5 | 15134b9e9dd7d423e9b3ca1e8b3c9ebd |
|
BLAKE2b-256 | f94dab70f74036532166f8c80bcc10b5f5338418fc0ef37fcecbb5abce0f099a |