Skip to main content

mitol-django-mail

This is the Open Learning Django Mail app. It provides a few key features around mail:

  • Templated multipart html emails
  • Automatic generation of plaintext portion of multipart email
  • CSS inlining for email html

Getting started

pip install mitol-django-mail

Add the mail app:

INSTALLED_APPS = [
    ...
    "mitol.mail.apps.MailApp",
]

Settings

Common Django settings

  • SITE_BASE_URL - the website's host url, including the protocol (e.g. "https://example.com/")
  • SITE_NAME - the website's name

Mail app settings

All settings for the mitol-django-mail app are namespaced in django settings with MITOL_MAIL_ prefix.

  • MITOL_MAIL_FROM_EMAIL - the default from email for all messages
  • MITOL_MAIL_REPLY_TO_ADDRESS - the default reply-to email for all messages
  • MITOL_MAIL_MESSAGE_CLASSES - a list of fully qualified message class names that make the message classes available in the debugger
  • MITOL_MAIL_ENABLE_EMAIL_DEBUGGER - True if the email debugger should be enabled, you probably want to set this to the same value as DEBUG
  • MITOL_MAIL_RECIPIENT_OVERRIDE - only used locally, this overrides the recipient of all outgoing email messages
  • MITOL_MAIL_FORMAT_RECIPIENT_FUNC - (optional) set to a custom function to format recipients. You'll typically use this if you're storing the name in a place other that Django's builtin User model. Default: "mitol.mail.defaults.format_recipient".
  • MITOL_MAIL_CAN_EMAIL_USER_FUNC - (optional) set to a custom function to determine whether a user can be sent an email. You'll typically use this if you have additional criteria beyond the user having an email. Default: "mitol.mail.defaults.can_email_user".
  • MITOL_MAIL_CONNECTION_BACKEND - the connection backend to use for email sending. You'd use this only if you're doing something really custom that anymail doesn't give you. Default: "anymail.backends.mailgun.EmailBackend".

Usage

Create message classes

This involves subclassing mitol.mail.messages.TemplatedMessage. To subclass, do the following:

  • template_name attribute - str that denotes the directory within templates/mail that this message's templates reside in (e.g. "password_reset")
  • name attribute - a human-friendly name for your message (e.g. "Password Reset")
  • get_debug_template_context - static method that returns a context dict for rendering the email in the debugger

Define templates

In your apps's templates directory, create some templates:

templates/
  mail/
    {template_name}/
      subject.txt
      body.html

Configure settings.py

Add your custom message class to MITOL_MAIL_MESSAGE_CLASSES so it is available in the debugger.

Optional customizations

Optionally, you can also override:

  • get_base_template_context - extend the default base template context used with all emails of this type. Return type is a dict. As a best practice you should be merging with super().get_base_template_context().
  • get_default_headers - extend the default headers included with all emails of this type. Return type is a dict. As a best practice you should be merging with super().get_default_headers().

Metadata

Release files for mitol-django-mail 2026.10.30

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mitol-django-mail 2026.10.30
File Size Uploaded Provenance Actions
mitol_django_mail-2026.10.30.tar.gz 14.3 kB With provenance Details for mitol_django_mail-2026.10.30.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mitol-django-mail 2026.10.30
File Interpreter ABI Platform Actions
mitol_django_mail-2026.10.30-py3-none-any.whl Python 3 none any Details for mitol_django_mail-2026.10.30-py3-none-any.whl

Total release size: 33.7 kB

Release files / mitol_django_mail-2026.10.30.tar.gz

Download URL mitol_django_mail-2026.10.30.tar.gz
Size 14.3 kB
Tags Source
SHA-256 checksum
How to use checksums
45d8a768d810fbd7f89a2a0447932e924d8106d597363729d92bd5add11a52b4
BLAKE2b-256 checksum
How to use checksums
a5b49169631a7c9d656f2c957ce249f325f532d7093b638e837d16d5b6e6fa7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / mitol_django_mail-2026.10.30-py3-none-any.whl

Download URL mitol_django_mail-2026.10.30-py3-none-any.whl
Size 19.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
30d634578430e0ef55f0208cc799b9ecebbf99e9dc3d86183567f406701d2fb6
BLAKE2b-256 checksum
How to use checksums
0d105dacb8095bf7b5522adcf573f5b9c3cc5ea57f8075ee98979319b0f4a42a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Security for mitol-django-mail 2026.10.30

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for mitol_django_mail-2026.10.30.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page