BYOD email with real Resend Domains verification + content scanner + probation + recipient-dedup + Wave 1a consent gate. Same SDK as Push + SMS.
Resend ships transactional, Customer.io ships lifecycle, Mailchimp ships broadcasts — three vendors, three reputations, three audience exports. Sendora collapses senders: one BYOD setup, real Resend Domains verification (not optimistic stubs), DKIM signed by you, recipient-dedup at the dispatch layer (no duplicate sends after a signin), per-org rate limits + 30-day probation pool, signed bounce/complaint webhooks, RFC 8058 one-click unsubscribe, opt-in consent enforcement on broadcast + workflow categories (Wave 1a). Honest about audience fan-out: `sendEmail` takes one recipient at a time — audience-driven fan-out happens via Automation workflows or your own iteration, not a single-call audience send.
Features
- BYOD (bring your own domain) — one-time DNS setup, real Resend Domains integration (POST /domains + verify), DKIM signed by you, reputation isolation per tenant.
- 4-mode category routing — transactional / auth / inbound_ack / ticket → Cloudflare provider; broadcast / workflow → Resend. Platform-critical mail isolated from customer broadcasts.
- Consent enforcement (Wave 1a) — opt-in
enforce_consenttoggle on org settings. When on, broadcast + workflow categories require a grantedmarketingconsent row forinput.tobefore dispatch. No record OR revoked →email_sendsrow withstatus='failed' provider='suppressed' suppressed_reason='no_consent'for audit. - RFC 8058 one-click unsubscribe + per-org suppression list. Honest: suppressions are scoped
(org_id, email)— per-org, not platform-wide. An unsubscribe on one Sendora-using org does NOT propagate to another. - Content safety scanner blocks phishing / credential-harvest patterns on customer-authored mail (broadcast / workflow / transactional). Platform categories (ticket / auth / inbound_ack) bypass.
- Recipient-dedup at dispatch —
(orgId, recipient, subject)within 60s suppressed. Belt-and-braces below device-takeover. - Per-org rate limits + 30-day probation pool for new senders — reputation isolation between tenants.
- Signed bounce + complaint webhooks — Resend Svix-HMAC + SES SNS + CF synchronous + CF GraphQL bounce poller every 15m →
email_suppressions. - Templates with `{{var}}` interpolation + sandbox preview — honest: the renderer is regex
{{var}}replace, NOT Liquid. No{% if %}, no helpers — single-variable substitution only. - **
email.*events** —email.sent,email.delivered,email.opened,email.clicked,email.bounced,email.complainedfire on the platform bus. Webhooks subscription captures every state change. - Audience fan-out via Automation — pick an audience in a workflow trigger,
send_emailstep fires per matched user. Honest: there's no single-callsendToAudience()API; the fan-out is the workflow.
Common use cases
BYOD transactional + lifecycle email where the same tenant holds your Customers + Automation + Audit.
Product-led growth lifecycle (welcome / activation / re-engage) triggered automatically by Analytics events.
Multi-tenant SaaS routing mail per customer's own domain with reputation isolation per tenant.
Start in minutes. Scale without switching tools.
The free tier covers most side projects. Every module is turn-key and every SDK is first-party.