Django针对Amazon SE、Mailgun、Mailjet、Postmark、SendGrid、SendInBlue、SparkPost和其他事务性ESP的电子邮件集成
django-anymail的Python项目详细描述
Anymail将多个事务性电子邮件服务提供商(ESP)集成到Django中,
具有一致的API,允许您使用ESP添加的功能而不必锁定代码
对于特定的ESP。
它目前完全支持amazon ses、mailgun、mailjet、postmark、sendinblue、sendgrid, 以及SparkPost,并且对Mandrill的支持有限。
AnyMail规范了ESP功能,因此它与Django的 内置django.core.mail包。它包括:
- 支持HTML、附件、额外标题和 Django’s built-in email
- 使使用额外ESP功能变得容易的扩展,如标记、元数据, 以及跟踪,使用ESP之间可移植的代码
- HTML电子邮件的简化内联图像
- 通过连接 您的ESP的网络连接到django信号
- 使用ESP的合并和模板功能发送“批量事务处理”
- 入站消息支持,通过ESP的Webhook接收电子邮件, 通过对附件和其他入站内容的简化、可移植的访问
任何邮件都是根据bsd许可证发布的。它被广泛的测试 django 1.11–2.2(包括python 2.7、python 3和pypy)。 任何邮件发布都在semantic versioning之后
资源
- 完整文档:https://anymail.readthedocs.io/en/v6.1.0/
- PyPI上的包:https://pypi.org/project/django-anymail/
- Github上的项目:https://github.com/anymail/django-anymail
- 变更日志:https://anymail.readthedocs.io/en/v6.1.0/changelog/
任何邮件1-2-3
下面是如何发送消息的。 本例使用mailgun,但您可以替换mailjet、邮戳或sendgrid 或SparkPost或任何其他支持的ESP,其中您可以看到“mailgun”:从pypi安装任何邮件:
$ pip install django-anymail[mailgun]
([mailgun]部分安装该esp所需的任何其他包。 Mailgun没有,但其他一些ESP有。)
编辑项目的settings.py:
INSTALLED_APPS=[# ..."anymail",# ...]ANYMAIL={# (exact settings here depend on your ESP...)"MAILGUN_API_KEY":"<your Mailgun key>","MAILGUN_SENDER_DOMAIN":'mg.example.com',# your Mailgun domain, if needed}EMAIL_BACKEND="anymail.backends.mailgun.EmailBackend"# or sendgrid.EmailBackend, or...DEFAULT_FROM_EMAIL="you@example.com"# if you don't already have this in settingsSERVER_EMAIL="your-server@example.com"# ditto (default from-email for Django errors)
现在是常规的Django email functions 将通过您选择的ESP发送:
fromdjango.core.mailimportsend_mailsend_mail("It works!","This will get sent through Mailgun","Anymail Sender <from@example.com>",["to@example.com"])
你可以发送一条HTML消息,包括一个内联图像, 自定义标记和元数据:
fromdjango.core.mailimportEmailMultiAlternativesfromanymail.messageimportattach_inline_image_filemsg=EmailMultiAlternatives(subject="Please activate your account",body="Click to activate your account: http://example.com/activate",from_email="Example <admin@example.com>",to=["New User <user1@example.com>","account.manager@example.com"],reply_to=["Helpdesk <support@example.com>"])# Include an inline image in the html:logo_cid=attach_inline_image_file(msg,"/path/to/logo.jpg")html="""<img alt="Logo" src="cid:{logo_cid}"> <p>Please <a href="http://example.com/activate">activate</a> your account</p>""".format(logo_cid=logo_cid)msg.attach_alternative(html,"text/html")# Optional Anymail extensions:msg.metadata={"user_id":"8675309","experiment_variation":1}msg.tags=["activation","onboarding"]msg.track_clicks=True# Send it:msg.send()
见full documentation 更多功能和选项,包括接收消息和跟踪 已发送消息状态。