SMTP versus a platform
Every few months a developer on every team runs the math and asks the reasonable question: can we drop the paid email API and just talk SMTP to our provider directly? The pricing looks tighter. The control looks tighter. The dependency surface looks smaller. The reasoning is not wrong.
The problem is that SMTP is a transport, not a platform. When you adopt SMTP as your email layer, you inherit the transport and you do not inherit anything else. Everything above the wire — retries, rate limiting per provider, suppression, bounce classification, event normalisation, templates, campaigns, audit, multi-provider failover — is yours to build, and every one of those is a small product.
This article compares two honest paths for developers:
- Run raw SMTP against your provider(s) and build the operating layer.
- Connect those same SMTP endpoints (plus any provider APIs) through Mailers.io and let the orchestration layer do the operating work.
Both are valid. The choice is about how much undifferentiated email plumbing you want to maintain in-house.
Why this choice matters early
Email is a problem where the wrong architectural decision compounds. Pick SMTP-only on day one and the code calls SMTP.send() in ten places, bounces are not captured, retries are ad-hoc, and by month six your team is quietly re-inventing a pull-based queue with per-provider backoff. None of that is valuable work.
Pick an opinionated single-provider API instead and you ship fast — but you structurally lock into that one provider’s SDK, webhook shape, pricing tiers, and policy. Moving off costs a quarter of engineering time.
An orchestration layer gives you the middle path: use SMTP as one of many connectable transports, keep the control plane provider-agnostic, and let the app call a stable API that does not change if you swap the underlying transport next month.
What raw SMTP actually gives you
Raw SMTP, as a developer, gives you:
- A well-known, universal protocol (RFC 5321).
- Transport to any receiver that speaks SMTP.
- STARTTLS and SMTPS for encryption, and SMTP AUTH for authentication.
- An error code space that distinguishes soft fails (4xx) from hard fails (5xx).
What it does not give you:
- Asynchronous events (delivered, opened, clicked, complained, bounced) — those require provider-specific webhook APIs.
- Bounce classification. A 550 from different receivers means different things; aggregating that across senders is your problem.
- Suppression list storage, enforcement, and export.
- Rate limiting per IP, per mailbox, per provider.
- Retry strategy, dead-letter handling, back-pressure, queue observability.
- Multi-provider logic. If you want to fail over from provider A to provider B, you write that.
- Templates, variable substitution, audit, team access.
None of this is an argument against SMTP. It is an argument that SMTP is the transport, and the operating layer above SMTP is the actual product — whether you build it or adopt it.
What Mailers.io gives you on top of SMTP
Mailers.io is a multi-provider email orchestration platform. Any RFC-compliant SMTP server can be attached as a sending provider, alongside Amazon SES, Mailgun, SendGrid, Postmark, Resend, and Brevo via their APIs. The attachable set is listed at /integrations; the SMTP integration specifically is at /integrations/smtp.
What the orchestration layer adds to a raw SMTP setup:
- One REST API. Your app calls
POST /v1/sendor the campaign endpoints regardless of which provider or SMTP endpoint executes the send. - Quota-aware routing. Configure
max_per_hourandmax_per_dayper provider, plus priority order. The router picks the highest-priority eligible provider with remaining capacity. - Automatic failover. 4xx and 5xx responses (or provider-level errors) trigger the next eligible provider.
- Normalised events. Webhook events for delivered, bounced, complained, opened, and clicked arrive in the same shape regardless of underlying provider.
- Centralised suppression and compliance. Global unsubscribe, list-unsubscribe headers, bounce and complaint suppression, do-not-contact lists, and per-domain suppression.
- Audit log. Every send, template edit, and access event is recorded.
- RBAC. Per-resource Full Access and Read Only permissions across Campaign, Mail List, Automation, Template, Form, Sending Server, and Sending Domain.
What it does not give you:
- It is not itself an SMTP server or sending provider.
- No reply management, no unified inbox.
- No lead database.
- No inbox placement guarantee — reputation, authentication, content, and receiving-side decisions are not under our control.
Side-by-side comparison
| Capability | Raw SMTP | Mailers.io (over SMTP + APIs) |
|---|---|---|
| Protocol | SMTP / ESMTP, STARTTLS | REST API on top; SMTP used under the hood |
| Multiple providers | You write the logic | Connect providers, set caps and priority |
| Failover | Custom code + operator paging | Automatic based on caps and errors |
| Events / webhooks | Per-provider APIs; you normalise | Normalised event shape across providers |
| Suppression & compliance | Bring your own database and enforcement | Built-in, per-workspace |
| Templates & campaigns | None — you build what you need | Template manager, campaigns, automations |
| RBAC & audit | You build it | Per-resource permissions, audit logs |
| Analytics | Log lines + your queries | Per-provider, per-domain, per-campaign rollups |
| Delivery cost | You pay the provider directly | You still pay the provider directly; no resale |
Five things you build yourself if you stay on SMTP
1. A reliable queue with per-provider backoff
Sync SMTP from your app server is almost never the right shape. You want a queue — SQS, Redis Streams, Postgres LISTEN/NOTIFY, Temporal, whatever — with per-provider concurrency, exponential backoff on 4xx greylisting, and dead-letter routing for persistent 5xx. That queue is not optional; it just gets written somewhere.
2. Event ingestion and bounce classification
SMTP tells you the synchronous response. Asynchronous events (delivered, opened, clicked, complained, bounced soft vs hard) come via provider-specific APIs and look different per provider. You will end up with a service that listens to webhooks, decodes provider payloads, and writes a normalised event stream. That service exists inside Mailers.io already.
3. Suppression enforcement
Unsubscribe, hard bounce, complaint, and do-not-contact are not suggestions — they are compliance requirements under CAN-SPAM and GDPR. Enforcing suppression means every send checks a suppression table first, and the table is populated by every webhook event. At small volume this is a crontab; at real volume it is a queue, a read-through cache, and a deduplication layer.
4. Per-mailbox, per-provider rate limiting
Gmail SMTP has per-mailbox daily limits. SES has account-level and per-second sending quotas. Mailgun has burst caps tied to plan. Enforcing the right cap at the right layer — so one campaign does not run a mailbox over — is a real piece of operational logic. Getting it subtly wrong is how mailboxes get rate-limited or suspended.
5. Observability
Per-provider latency, per-domain delivery rates, per-campaign conversion, per-mailbox burn-down. Logs alone will not give you this. You either build dashboards over an event table or accept that your visibility is a tail of log lines.
Three developer scenarios
Scenario A — A side project or low-volume internal tool
You are sending password resets and a weekly digest. Total volume is a few thousand emails a month. Raw SMTP to a provider like SES or Gmail is completely reasonable. You do not need orchestration. The Mailers.io free plan covers this without any commitment, if you want the operating layer anyway, but the honest answer is: you do not need it here.
Scenario B — A product with real transactional volume
A couple hundred thousand sends a month, more during peaks. You are starting to hit the limits of ad-hoc retry logic. Bounces are being missed. A campaign accidentally sent to someone who unsubscribed on a different list. Your on-call has debugged SMTP four times in six months.
You can either write the operating layer (suppression, normalised events, queue with per-provider backoff, audit), or you can connect your SMTP endpoints into Mailers.io and call the unified API. Both paths are valid. The orchestration path compresses weeks of work into provider configuration.
Scenario C — A developer platform that ships email for users
You are building a platform where your customers ship email through you. You need sub-tenant isolation, per-customer sending domains, and RBAC. Raw SMTP forces you to build a multi-tenant control plane yourself. That is a lot of code, and most of it is undifferentiated.
Mailers.io models this directly: sub-workspaces per customer, per-customer sending domains, the multi-provider API, and optional white-label on Enterprise. You get to focus on your product, not on re-implementing the email control plane.
Pros and cons
When raw SMTP is right
- Very low volume, very simple workload.
- You have extreme operational maturity and actually want to own the full email stack (most teams underestimate this cost).
- You have data-residency or regulatory requirements that make any third-party orchestration impossible.
When orchestration over SMTP is right
- You have or will have more than one provider.
- You want normalised events and a stable API across providers.
- You want suppression, audit, and RBAC without writing them yourself.
- You want to avoid single-provider lock-in while still using the providers you already pay for.
- Your engineering time is better spent on product differentiation than email plumbing.
Who should choose what
Developers comfortable operating the full email stack, with low volume, and with strict third-party constraints, should stay on SMTP. Everyone else should seriously consider an orchestration layer, with SMTP still as one of the connectable transports underneath.
How to decide
The decision is a self-audit. List the pieces above — queue, webhooks, suppression, rate limiting, RBAC, audit, templates — and honestly estimate how much of each exists in your codebase today. Multiply by the hours it will take to bring the missing pieces to production quality. If the answer exceeds a couple of weeks, you are underpaying orchestration on an honest P&L.
The SMTP integration page covers how to attach an SMTP server as a provider, and the API overview documents the unified send and event model.
Testing discipline for guide-style problems usually improves when you separate “content experiments” from “infrastructure changes.” If you must change both, sequence them: stabilize the path, then test creative, or you will not know which variable moved the signal you care about. If you are comparing providers, do it with the same list ethics and the same segment definitions; otherwise the comparison is a story, not a measurement.
Runbooks are underrated. A good runbook is not a PDF nobody opens; it is a checklist that includes who is allowed to do what, what “pause sending” does in your configuration, and how to verify suppression state after an incident. Mailers.io is built as orchestration and policy on infrastructure you connect—useful when you have multiple paths, shared templates, and need consistent governance across teams. It is the wrong product if the primary pain is a missing CRM surface or a guarantee that mail will “land in primary.”
Related depth for “Article”: operators often underestimate how much time is spent on credential lifecycle (API keys, SMTP passwords, domain delegation) and how little time is left for improving message quality. Rebalance that intentionally if revenue depends on reliable outbound. Multi-provider routing can reduce provider-specific lock-in and separate blast radius, but it does not remove your obligation to own consent, suppression, and record-keeping. Not legal advice. Where GDPR, CCPA/CPRA, or similar apply, align with counsel. We do not use generic marketing copy to assert SOC 2 or ISO 27001.
Cross-functional alignment fails quietly: Marketing ships a new domain, Data updates a list export, and Engineering rotates an API key—each change reasonable alone, but together they break assumptions about identity and suppression. A useful discipline is a lightweight change log for anything that touches a live sending identity, even if the change is “small.” The goal is not paperwork theatre; the goal is that the next on-call can reconstruct state without heroics.
Procurement and security questions often ask for certifications as shorthand. The better question is: what logs exist, for how long, and who can access them? A control plane can unify routing, but you still need your own data map for personal data, subprocessors, and incident response. This article is educational; align final commitments with your counsel and your customer contracts. We do not claim outcomes we cannot own (placement, read rates, or a unified sales inbox) because that would mis-sell the product’s shape.