Python SDK
Official Python client for the Mailofly REST API. Package:mailofly · Requires: Python 3.9+ · Quickstart: Python
Install
Initialize
Send email
With a saved template
client.compose.send is deprecated and forwards to /v1/emails.
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
mailofly · Requires: Python 3.9+ · Quickstart: Python
pip install mailofly
# or
uv add mailofly
import os
from mailofly import Mailofly, MailoflyError
client = Mailofly(
os.environ["MAILOFLY_API_KEY"],
# base_url="https://www.mailofly.com", # optional override
)
try:
result = client.emails.send({
"from": "Acme <onboarding@example.com>",
"to": ["alex@example.com"],
"subject": "Hello",
"html": "<p>Thanks for signing up.</p>",
})
print("Sent:", result["id"])
except MailoflyError as e:
print(e.status, e.error, e.detail_message)
raise
client.emails.send({
"from": "Acme <onboarding@example.com>",
"to": ["alex@example.com"],
"template": {
"id": "uuid-of-template",
"variables": {"first_name": "Alex"},
},
})
client.compose.send is deprecated and forwards to /v1/emails.
result = client.batch.send([
{
"from": "Acme <onboarding@example.com>",
"to": ["foo@example.com"],
"subject": "hello world",
"html": "<h1>it works!</h1>",
},
{
"from": "Acme <onboarding@example.com>",
"to": ["bar@example.com"],
"subject": "world hello",
"html": "<p>it works!</p>",
},
])
print([row["id"] for row in result["data"]])
| Namespace | Methods |
|---|---|
client.accounts | list, create, get, update, delete |
client.contacts | list, create, get, update, delete |
client.templates | list, create, get, update, delete |
client.segments | list, create, get, update, delete, contacts.list/add/remove |
client.campaigns | list, create, get, update, delete, runs, send |
client.emails | list, get, send |
client.batch | send |
client.compose | send (deprecated) |
client.mail_logs | list |
accounts = client.accounts.list()
client.contacts.create({
"email": "alex@example.com",
"first_name": "Alex",
"custom_fields": {"plan": "pro"},
})
client.campaigns.send("campaign-uuid", {"send_now": True})
logs = client.mail_logs.list(status="failed", page=1, page_size=50)
meta = Mailofly.discovery()
print(meta.get("resources"))
from mailofly import MailoflyError
try:
client.accounts.list()
except MailoflyError as e:
# e.status — HTTP status
# e.error — error code string
# e.detail_message — human-readable message
pass