Lifecycle sequence email can use HTML, MJML, Liquid templates, and provider-specific adapters.

Payload Shape

Email templates render to a payload with the normal email fields:

%{
  to: "customer@example.com",
  from: "hello@example.com",
  subject: "Welcome",
  text: "Thanks for joining.",
  html: "<p>Thanks for joining.</p>"
}

Email steps can opt into unsubscribe headers with "unsubscribe_headers", "unsubscribe", or nested "email" => %{"unsubscribe_headers" => true}. Configure :unsubscribe_url_builder so the host can return the unsubscribe URL inserted into RFC 8058 headers.

Providers

Swoosh-backed providers use Swoosh adapters where they exist. Gmail and MS365 use direct APIs with a host-owned token_callback; DripDrop never stores refresh tokens or OAuth client secrets.

Provider Webhooks

Mailgun, SendGrid, Postmark, MailerSend, and SES webhook events are normalized into message_events. Complaints, unsubscribes, and bounces normalized with severity: "permanent" upsert suppressions in the same transaction.