Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Django Anymail | 1,416 | 1,070 | 10 | a month ago | 48 | May 15, 2022 | 3 | other | Python | |
Django email backends and webhooks for Amazon SES, MailerSend, Mailgun, Mailjet, Postmark, Postal, SendGrid, Sendinblue, SparkPost and more | ||||||||||
Stampie | 285 | 6 | 5 | a year ago | 24 | September 08, 2021 | 1 | mit | PHP | |
Library for using online Email providers | ||||||||||
Go Mail | 162 | 11 | 7 months ago | 17 | February 17, 2022 | 3 | mit | Go | ||
📧 A cross platform mail driver for GoLang. Featuring Mailgun, Postal, Postmark, SendGrid, SparkPost & SMTP. | ||||||||||
Slmmail | 106 | 17 | 4 | 2 months ago | 40 | January 24, 2022 | 4 | other | PHP | |
Send mail from Laminas or Mezzio using external mail services. | ||||||||||
Dns Zone Files | 39 | a year ago | cc0-1.0 | |||||||
⛅️ DNS Zone Files ready to import on CloudFlare for easy configurations of common configs. Files are in BIND Format. | ||||||||||
Mailhookbundle | 36 | 5 months ago | 9 | October 22, 2021 | mit | PHP | ||||
A bundle to catch API webhook from different mail service | ||||||||||
Courier | 24 | 4 | 4 | 4 years ago | 13 | March 12, 2019 | 2 | other | PHP | |
A domain-driven library for sending transactional emails in PHP | ||||||||||
Wemail | 17 | a month ago | 53 | PHP | ||||||
Send Affordable Bulk Email Campaign Through WordPress | ||||||||||
Xe Advanced Mailer | 12 | 10 months ago | 1 | gpl-2.0 | PHP | |||||
XE 고급 메일 발송 모듈 (Advanced Mailer) | ||||||||||
Parse Server Sparkpost Adapter | 3 | 5 years ago | JavaScript | |||||||
Simple sparkpost adapter for parse server |
Anymail lets you send and receive email in Django using your choice
of transactional email service providers (ESPs). It extends the
standard django.core.mail
with many common ESP-added features, providing
a consistent API that avoids locking your code to one specific ESP
(and making it easier to change ESPs later if needed).
Anymail currently supports these ESPs:
Anymail includes:
Anymail maintains compatibility with all Django versions that are in mainstream or extended support, plus (usually) a few older Django versions, and is extensively tested on all Python versions supported by Django. (Even-older Django versions may still be covered by an Anymail extended support release; consult the changelog for details.)
Anymail releases follow semantic versioning. The package is released under the BSD license.
Resources
Here's how to send a message. This example uses Mailgun, but you can substitute Mailjet or Postmark or SendGrid or SparkPost or any other supported ESP where you see "mailgun":
Install Anymail from PyPI:
$ pip install "django-anymail[mailgun]"
(The [mailgun]
part installs any additional packages needed for that ESP.
Mailgun doesn't have any, but some other ESPs do.)
Edit your project's 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 = "[email protected]" # if you don't already have this in settings
SERVER_EMAIL = "[email protected]" # ditto (default from-email for Django errors)
Now the regular Django email functions will send through your chosen ESP:
from django.core.mail import send_mail
send_mail("It works!", "This will get sent through Mailgun",
"Anymail Sender <[email protected]>", ["[email protected]"])
You could send an HTML message, complete with an inline image, custom tags and metadata:
from django.core.mail import EmailMultiAlternatives
from anymail.message import attach_inline_image_file
msg = EmailMultiAlternatives(
subject="Please activate your account",
body="Click to activate your account: https://example.com/activate",
from_email="Example <[email protected]>",
to=["New User <[email protected]>", "[email protected]"],
reply_to=["Helpdesk <[email protected]>"])
# 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="https://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()
See the full documentation for more features and options, including receiving messages and tracking sent message status.