Skip to main content

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, and attachments
  • Methods:
    • has_attachments() — checks if attachments exist
    • summary() — 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_ezmail-2.2.8.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_ezmail-2.2.8-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file py_ezmail-2.2.8.tar.gz.

File metadata

  • Download URL: py_ezmail-2.2.8.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for py_ezmail-2.2.8.tar.gz
Algorithm Hash digest
SHA256 208bcbd60d1d095e1b476c526ad60e52068738360576e6c19fd95c0ebee3d547
MD5 26eb26fc5565db064df69df585202d7a
BLAKE2b-256 e596dac660aa1b8931aa3ddd25d4ba02068a501c91cdef779f6702e2b338c03e

See more details on using hashes here.

File details

Details for the file py_ezmail-2.2.8-py3-none-any.whl.

File metadata

  • Download URL: py_ezmail-2.2.8-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for py_ezmail-2.2.8-py3-none-any.whl
Algorithm Hash digest
SHA256 30c601a1241d12a543299542101b8727f3a5738df63a4f868349364ac9e1bd79
MD5 8b1cc09275388a5edf11d10414ed31ba
BLAKE2b-256 b3ab365926db285ae4b357e5b620f5f8a1a969f494ac3fc9b19d684875afbda7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page