Integrations

Django email integration for MailerSend

Send and receive email in Django using MailerSend
Developer
Price

Free to use under the BSD license.

Last Updated

11/03/2023

Integration Support

Check out their docs or their forum.

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).

Get started

Install Anymail from PyPI

$ pip install "django-anymail[mailersend]"

The [mailersend] part installs any additional packages needed.

Edit your project's settings.py:

INSTALLED_APPS = [
    # ...
    "anymail",
    # ...
]

ANYMAIL = {
    # (exact settings here depend on your ESP...)
    "MAILERSEND": "<your MailerSend key>",
    "MAILERSEND_SENDER_DOMAIN": 'mg.example.com',  # your MailerSend domain, if needed
}
EMAIL_BACKEND = "anymail.backends.mailersend.EmailBackend"
DEFAULT_FROM_EMAIL = "you@example.com"  # if you don't already have this in settings
SERVER_EMAIL = "your-server@example.com"  # ditto (default from-email for Django errors)

Now the regular Django email functions will send through MailerSend:

from django.core.mail import send_mail

send_mail("It works!", "This will get sent through MailerSend",
          "Anymail Sender <from@example.com>", ["to@example.com"])

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 <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="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.