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.4.0.tar.gz (18.6 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.4.0-py3-none-any.whl (17.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: py_ezmail-2.4.0.tar.gz
  • Upload date:
  • Size: 18.6 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.4.0.tar.gz
Algorithm Hash digest
SHA256 df3f22e1a6061c0653315af8e83ee207c3a4e2d734821cc2ed71954d1121c5d7
MD5 4d3ac4674e92b7248feebfee98ff5d3c
BLAKE2b-256 2e3348aa575b8ccb8803f0072894d77f58c01931c1e882b9f9af0b15dad841ca

See more details on using hashes here.

File details

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

File metadata

  • Download URL: py_ezmail-2.4.0-py3-none-any.whl
  • Upload date:
  • Size: 17.0 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 60eb9944677815aecc93884a2f8d4c5dfefe7504db39840d886b94909eeb39bc
MD5 be12f03b5403ac9ed1335442c9984e39
BLAKE2b-256 80952d542e6fd23fdd4ee727ded9eb32993d57387416d4fd8327500778d58b53

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