python-emails
Build, transform, and send emails in Python with a high-level API.
python-emails helps you compose HTML and plain-text messages, attach files, embed inline images, render templates, apply HTML transformations, sign with DKIM, and send through SMTP without hand-building MIME trees.
Why python-emails
A concise API over email and smtplib
HTML and plain-text messages in one object
File attachments and inline images
CSS inlining, image embedding, and HTML cleanup
Jinja2, Mako, and string template support
DKIM signing
Loaders for URLs, HTML files, directories, ZIP archives, and RFC 822 messages
SMTP sending with SSL/TLS support
Async sending via aiosmtplib
Quick Example
import emails
message = emails.html(
subject="Your receipt",
html="<p>Hello!</p><p>Your payment was received.</p>",
mail_from=("Billing", "billing@example.com"),
)
message.attach(filename="receipt.pdf", data=open("receipt.pdf", "rb"))
response = message.send(
to="customer@example.com",
smtp={
"host": "smtp.example.com",
"port": 587,
"tls": True,
"user": "billing@example.com",
"password": "app-password",
},
)
assert response.status_code == 250
Installation
Install the lightweight core:
pip install emails
Install HTML transformation features such as CSS inlining, image embedding, and loading from URLs or files:
pip install "emails[html]"
Install Jinja2 template support for the JinjaTemplate class:
pip install "emails[jinja]"
Install async SMTP sending support for send_async():
pip install "emails[async]"
Common Tasks
Build and send your first message: Quickstart
Configure installation extras: Install guide
Inline CSS, embed images, and customize HTML processing: Advanced Usage
Learn the full public API: API Reference
Troubleshoot common scenarios: FAQ
Explore alternatives and related projects: Links
What You Get
Message composition for HTML, plain text, headers, CC/BCC, and Reply-To
Attachments, inline images, and MIME generation
Template rendering in html, text, and subject
HTML transformations through message.transform()
SMTP delivery through config dicts or reusable backend objects
Django integration via DjangoMessage
Flask integration via flask-emails
When To Use It
Use python-emails when you need more than a minimal plain-text SMTP call: HTML emails, attachments, inline images, template rendering, DKIM, message loading from external sources, or a cleaner API than hand-written email.mime code.
If you only need to send a very small plain-text message and want zero dependencies, the standard library may be enough.
Documentation
Project Status
python-emails is production/stable software and currently supports Python 3.10 through 3.14.
Contributing
Issues and pull requests are welcome.
License
Apache 2.0. See LICENSE.
Release files for emails 1.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| emails-1.1.3.tar.gz | 38.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| emails-1.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 82.9 kB
Release files / emails-1.1.3.tar.gz
| Download URL | emails-1.1.3.tar.gz |
|---|---|
| Size | 38.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
935c70428c664f26e93b410673e59a763baa688886167fd1d50dc03506b17cc5
|
|
BLAKE2b-256 checksum How to use checksums |
c0da81560b8c358c35315b3a96e6d80b88fca1607db863370f3266edaa99fe03
|
| 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 Sep 28, 2026.
Transparency logRelease files / emails-1.1.3-py3-none-any.whl
| Download URL | emails-1.1.3-py3-none-any.whl |
|---|---|
| Size | 44.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
54e3fb6e93c0e687d94afd3e40d21994554e4eca85ea22239d715a72d5199f59
|
|
BLAKE2b-256 checksum How to use checksums |
e067c60e8b25bc0134b6b8de84e99c576bbb87060e854ea2f27c51e8a8f405df
|
| 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 Sep 28, 2026.
Transparency log