Send and read emails easily — with attachments, inline images, IMAP management, and OAuth2 authentication.
Project description
📧 EzMail
Send and read emails easily — with attachments, inline images, HTML templates, IMAP management, and OAuth2 authentication.
ezmail is a modern Python library that simplifies email automation and management.
It allows you to send and receive emails using SMTP and IMAP, supporting HTML templates, inline images, file attachments, and secure authentication (TLS/SSL or OAuth2).
🚀 Features
✉️ Sending Emails (EzSender)
- Send emails to one or multiple recipients
- Supports both HTML and plain text messages
- Embed inline images directly into the email body
- Attach any file type (
PDF,CSV,ZIP,XML, etc.) - Use Jinja2 templates for dynamic HTML emails
- Secure connection via TLS/SSL
- Optional hourly send rate limiting
- Full context manager support (
with EzSender(...) as ez:)
📥 Reading Emails (EzReader)
- Connect to any IMAP server using password or OAuth2 token
- List all available mailboxes (Inbox, Trash, Sent, etc.)
- Filter emails by
ALL,UNSEEN,SEEN,FROM,SUBJECT,TEXT,SINCE,BEFORE - Retrieve emails and attachments in memory (no file saving required)
- Mark as unread, move, delete, or empty folders (e.g., Trash)
- Full context manager support (
with EzReader(...) as reader:)
💌 Email Model (EzMail)
- Represents an individual email message
- Provides access to:
sender,subject,body,date, andattachments
- Methods:
has_attachments()— checks if attachments existsummary()— returns a short preview of the message body
💻 Installation
pip install py-ezmail
No additional configuration is required — just provide your SMTP and IMAP credentials.
🧠 Quick Overview
| Class | Description |
|---|---|
EzSender |
Composes and sends emails with HTML, inline images, and attachments. |
EzReader |
Reads, filters, and manages emails from IMAP servers. |
EzMail |
Represents a single email object (sender, subject, body, attachments). |
✉️ Example — Sending Emails
from ezmail import EzSender
smtp = {"server": "smtp.gmail.com", "port": 587}
sender = {"email": "me@gmail.com", "password": "app_password"}
with EzSender(smtp, sender) as ez:
ez.subject = "System Update Report"
ez.add_text("<h2>Hello!</h2><p>The latest report is attached below.</p>")
ez.add_attachment("report.pdf")
result = ez.send(["client@example.com", "team@example.com"])
print(result)
📬 Example — Reading Emails
from ezmail import EzReader
imap = {"server": "imap.gmail.com", "port": 993}
account = {
"email": "me@gmail.com",
"auth_value": "app_password",
"auth_type": "password"
}
with EzReader(imap, account) as reader:
emails = reader.fetch_unread(limit=5)
for mail in emails:
print(mail.subject, "-", mail.sender)
if mail.has_attachments():
for a in mail.attachments:
print("💎", a["filename"], len(a["data"]), "bytes")
🗑️ Managing Emails
with EzReader(imap, account) as reader:
emails = reader.fetch_unread(limit=1)
if emails:
mail = emails[0]
reader.move_to_trash(mail) # Move to Trash
reader.empty_trash() # Empty Trash
Advanced Example — HTML Templates & Inline Images
from ezmail import EzSender
with EzSender(
smtp={"server": "smtp.domain.com", "port": 587},
sender={"email": "me@domain.com", "password": "mypassword"}
) as ez:
ez.subject = "Welcome to our platform!"
ez.use_template("templates/welcome.html", name="John", version="3.2.1")
ez.add_image("logo.png", width="150px", cid="logo_img")
ez.send("john@client.com")
🔐 Authentication Methods
| Method | Description |
|---|---|
password |
Standard login using email and password (supports app passwords). |
oauth2 |
Secure OAuth2 token authentication (used by Gmail, Outlook, etc.). |
📦 Dependencies
- Jinja2 ≥ 3.0.0
- Built-in Python modules:
smtplib,imaplib,email,mimetypes,uuid,base64, etc.
🧮 Requirements
- Python ≥ 3.8
- Internet access (for SMTP/IMAP servers)
🧳 License
MIT © Luiz Henrique Brunca
🌎 Other Languages
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_ezmail-2.2.1.tar.gz.
File metadata
- Download URL: py_ezmail-2.2.1.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba78c8d7acaa78a303c8e3b10be3e9ed6b8262912d537a335cb0a8dc5c121e50
|
|
| MD5 |
1db43bec2c91d94e910ea80c8d832f7d
|
|
| BLAKE2b-256 |
3ad7d1faffef9b1445a7b18f85f6de3c2e833eed3b86f054b0571159953a810e
|
File details
Details for the file py_ezmail-2.2.1-py3-none-any.whl.
File metadata
- Download URL: py_ezmail-2.2.1-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d66d4e67580fcb4499c76d2f1c2437c0080841f9a07478ba53513ca889223ee1
|
|
| MD5 |
47fcd9815c17e2523c618fc74edabb4e
|
|
| BLAKE2b-256 |
919a315e5514ad123a4b6d19b30268b924bd4433446f9ef51ef37752f7dc4dac
|