
SMTP relay: what it is and how to set one up
An SMTP relay hands your app's mail on for it. What one is, when you need it, ports 465 and 587, the reply codes, and setup for six common clients.

Send email from Django: views, Celery and webhooks
Send email from Django with an API: the key in settings, a Celery task that retries with one idempotency key, and a CSRF-exempt webhook view for the events.

Send email from Rails: Action Mailer or an API
Send email from Rails with an API and no gem: a Net::HTTP service object, an Active Job that retries with one idempotency key, and a webhook controller.

Send email from Laravel: Mail or an HTTP API
Send email from Laravel with an API: the key in config/services.php, a queued job that retries with one idempotency key, and a webhook route excluded from CSRF.

Send email from Go: net/smtp or an HTTP API
Send email from Go with net/http: a client with a timeout, a typed error per refusal, retries that keep the idempotency key, and webhooks checked by hand.

Schedule email API: send at a time you choose
Schedule an email over the API: an ISO 8601 scheduled_at up to 30 days out, a PATCH to move it, a cancel, and the time-zone mistakes to avoid.

Email API rate limits: headers and backoff
Email API rate limits at Rasket: 10 requests a second per team, the four headers, a 429 retried with the same key, and the quotas that are not rate limits.

Email template variables done right
How email template variables should work: declared with a type and a fallback, checked at send, versioned so each email records what it said, and HTML-escaped.

Send email from Next.js: route handler or action
Send email from Next.js without leaking your API key: a route handler, a server action, the client-component trap, and a webhook that records what happened.

Email API vs SMTP: which should you use?
SMTP is a conversation; an email API is one request. What each gives you on retries, idempotency, events and firewalls, and how to move from one to the other.

Send email from Python: smtplib or an API
Send email from Python without an SMTP conversation: one requests call to the API, where the send belongs in Django and FastAPI, and retries that are safe.

Idempotent email sends: never send twice
A timeout does not tell you whether the send happened. What an idempotency key is, how the 24-hour window behaves, how to choose keys, and what a batch does.

Send email from Node.js: API vs SMTP vs Nodemailer
Three ways to send email from Node.js — an HTTP API, SMTP and Nodemailer — what each one costs you, and a working send with retries and webhooks.

Transactional vs marketing email: how to send each
What separates transactional email from marketing email — the trigger, consent, unsubscribe headers and reputation — and how to send both from one API.
Ready to send something?
Sign up, verify a domain and send your first email in minutes.