Skip to main content

📧 mailer-sdk

A simple, production-ready Python SDK for sending emails via SMTP. Zero dependencies. Gmail, Outlook, and Yahoo supported out of the box.

PyPI version Python License: MIT


Installation

pip install mailer-sdk

Quick Start

from mailer_sdk import Mailer

with Mailer(email="you@gmail.com", password="your-app-password") as mailer:
    mailer.send(
        to      = "friend@example.com",
        subject = "Hello!",
        body    = "Hey, this was sent using mailer-sdk!"
    )

Environment Variables (Recommended)

Instead of hardcoding credentials, use environment variables:

export MAILER_EMAIL=you@gmail.com
export MAILER_PASSWORD=your-app-password
export MAILER_PROVIDER=gmail   # optional, default is gmail
from mailer_sdk import Mailer

with Mailer() as mailer:   # reads from env automatically
    mailer.send(to="friend@example.com", subject="Hi", body="Hello!")

Features

Method Description
send() Send plain text or HTML email
send_html() Shortcut for HTML emails
send_bulk() Send individually to multiple recipients
send_template() Send HTML with {{placeholder}} fill-in
send_with_retry() Auto-retry with exponential backoff

Usage Examples

Plain Text

mailer.send(
    to      = "friend@example.com",
    subject = "Hello!",
    body    = "Plain text email."
)

HTML Email

mailer.send_html(
    to      = "friend@example.com",
    subject = "Welcome!",
    body    = "<h1>Hello!</h1><p>This is an <b>HTML</b> email.</p>"
)

With CC, BCC, and Attachment

mailer.send(
    to          = "friend@example.com",
    subject     = "Report",
    body        = "Please find the report attached.",
    cc          = ["manager@example.com"],
    bcc         = ["archive@example.com"],
    attachments = ["report.pdf"]
)

Bulk Send

result = mailer.send_bulk(
    recipients = ["a@example.com", "b@example.com", "c@example.com"],
    subject    = "Newsletter",
    body       = "Hello, here is this month's update!"
)
print(f"Sent {result['sent']}/{result['total']}")

Template Email

mailer.send_template(
    to       = "customer@example.com",
    subject  = "Order Confirmed",
    template = "<h2>Hi {{name}}!</h2><p>Order <b>#{{order_id}}</b> confirmed. Total: ${{total}}</p>",
    context  = {"name": "Alice", "order_id": "1042", "total": "59.99"}
)

Retry on Failure

mailer.send_with_retry(
    to          = "friend@example.com",
    subject     = "Important",
    body        = "Please read this.",
    max_retries = 3,   # default
    backoff     = 1    # 1s → 2s → 4s
)

Supported Providers

Provider Value
Gmail "gmail"
Outlook "outlook"
Yahoo "yahoo"
# Outlook example
mailer = Mailer(email="you@outlook.com", password="pass", provider="outlook")

Gmail App Password Setup

Gmail requires an App Password (not your real password):

1. Go to → myaccount.google.com
2. Security → 2-Step Verification (enable it)
3. Security → App Passwords → Generate
4. Copy the 16-character password
5. Use it as your password above

Error Handling

from mailer_sdk import Mailer, AuthError, SendError, ConnectError, ValidationError

try:
    with Mailer(email="you@gmail.com", password="wrong-pass") as mailer:
        mailer.send(to="friend@example.com", subject="Hi", body="Hello!")

except AuthError as e:
    print(f"Auth failed [{e.code}]: {e.message}")    # bad credentials

except ConnectError as e:
    print(f"Can't connect [{e.code}]: {e.message}")  # server unreachable

except SendError as e:
    print(f"Send failed [{e.code}]: {e.message}")    # delivery failed

except ValidationError as e:
    print(f"Bad input [{e.code}]: {e.message}")      # invalid inputs

Logging

Control SDK verbosity using Python's standard logging:

import logging

# See all SDK activity
logging.getLogger("mailer_sdk").setLevel(logging.DEBUG)

# Quiet mode — only errors
logging.getLogger("mailer_sdk").setLevel(logging.ERROR)

License

DT © Rishabh

Release files for mailer-sdk 1.0.9

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

Source distribution (sdist)

Source distribution for mailer-sdk 1.0.9
File Size Uploaded
mailer_sdk-1.0.9.tar.gz 9.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mailer-sdk 1.0.9
File Interpreter ABI Platform
mailer_sdk-1.0.9-py3-none-any.whl Python 3 none any Details

Total release size: 17.0 kB

Release files / mailer_sdk-1.0.9.tar.gz

Download URL mailer_sdk-1.0.9.tar.gz
Size 9.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9878681f3273e3d40b4a0e4a6f2e54dd05a578458875652beb43e53043f5f514
BLAKE2b-256 checksum
How to use checksums
7e0f3154b00c2d0227d19d2fb11ae96c91f0c926eb7454bf16527873ab605ec0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Feb 20, 2026.

Transparency log

Release files / mailer_sdk-1.0.9-py3-none-any.whl

Download URL mailer_sdk-1.0.9-py3-none-any.whl
Size 8.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3c6ab92527b6e53b0d3caa3e0af714094bb3b5a62d887dfd3e74c9d4489428ca
BLAKE2b-256 checksum
How to use checksums
0a990ccadde19ac1943b3ebebc52c95b4cce4a48602877488014acd8f4a046a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Feb 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.9 This release

2 release files

1.0.2

2 release files

1.0.0

2 release files

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