Documentation IndexFetch the complete documentation index at: /llms.txtUse this file to discover all available pages before exploring further.
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
mailofly
pip install mailofly # or uv add mailofly
import os from mailofly import Mailofly, MailoflyError client = Mailofly( os.environ["MAILOFLY_API_KEY"], )
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
/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"]])
client.identities
list
get
update
delete
client.accounts
client.contacts
create
client.templates
client.segments
contacts.list/add/remove
client.campaigns
runs
send
client.emails
client.batch
client.compose
client.mail_logs
identities = client.identities.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.identities.list() except MailoflyError as e: # e.status — HTTP status # e.error — error code string # e.detail_message — human-readable message pass