Envello
Tutorial

Migrating from Postmark to Envello

Envello Team·2026-07-16·6 min read

Postmark's API uses PascalCase field names (From, To, Subject, HtmlBody, TextBody) where Envello, like most newer APIs, uses lowercase (from, to, subject, html, text). There's no codemod for this one since the shapes genuinely differ, but the mapping is mechanical and the send call itself is a small, contained change.

Field mapping

  • From -> from, To -> to, Subject -> subject
  • HtmlBody -> html, TextBody -> text
  • Cc / Bcc -> cc / bcc, same comma-or-array flexibility on both sides
  • Attachments carry the same idea (base64 content, filename, content type), confirm the exact key names before migrating anything with attachments

Message Streams: what actually changes

Postmark's Message Streams separate transactional and broadcast sending onto different streams with independent reputation, specifically so a marketing send can't tank your password-reset deliverability. Envello doesn't have a named "streams" concept, but the underlying goal, isolating transactional reputation, is handled differently: dedicated IPs are available as a plan add-on, and usage-by-domain reporting lets you see sending patterns per domain rather than per stream.

If you were relying on Message Streams specifically to keep transactional and marketing mail separated, the honest equivalent on Envello is architectural: send marketing email through a different tool entirely, and keep this API for transactional sends only. That's a stricter separation than a stream setting, not a looser one.

Templates: the honest answer

Postmark's server-side templates support TemplateId and TemplateModel, with Handlebars-style logic (loops, conditionals) in the template editor. Envello's template system does variable substitution ({{name}} style placeholders) only. Simple Postmark templates port over fine. Templates using {{#each}} or {{#if}} blocks for anything non-trivial don't have a direct equivalent yet.

The practical path there: render the final HTML in your own application code before sending, the same approach that works for React Email templates, rather than depending on server-side template logic to do that work for you.

Domain verification and cutover

Add the SPF, DKIM, and DMARC records Envello generates alongside your existing Postmark records, don't remove the old ones until the switch has held for a few days. Swap your Postmark server token for ENVELLO_API_KEY, route a small percentage of traffic first, and use Envello's log search (90 days of history by default) to confirm delivery before widening the rollout.

Envello

EU-hosted transactional email, done right by default.