Developer & Website SMTP

When developers should use SMTP vs an email API

Receipts can be SMTP. Lists should not. Exclusive MX still owns inbound replies.

MailerZ editorial · Secuno LLC17 min read

SMTP vs email API is a volume and product-job choice. Use MailerZ SMTP for low-volume operational mail as your domain: receipts, form replies, cron alerts. Use an ESP or email API when you have lists, templates at scale, or marketing. MailerZ is not a campaign platform. Free has no send-as. Caps exist. Do not invent ports. Copy the dashboard.

smtp vs email api: the decision
Operational SMTP versus list APIs.

Quick answer for smtp vs email api

SMTP is a protocol. An email API is a vendor product with lists and webhooks.

RFC 5321 is SMTP. It does not manage campaigns.

MailerZ SMTP is authenticated send-as for approved low volume. Copy dashboard host, port, TLS or STARTTLS.

ESP APIs exist because lists need suppression, bounce handling, and templates at scale.

Mixing a newsletter into MailerZ SMTP hits caps and heats filters.

Start free for inbound. Pay for SMTP only if the job is operational.

Authoritative mail transport is defined in IETF RFC 5321 — Simple Mail Transfer Protocol. Product path: send and reply, docs, and features.

User problem and decision criteria

Decision criteria: volume, list vs 1:1, need for inbound replies, who owns From.

Criteria that do not belong: inboxing SLAs, using SMTP because it feels simpler for a 50k list.

Agencies should put ESP on marketing SOWs and MailerZ on domain routing SOWs.

If you only needed inbound aliases, you may need no SMTP and no API.

WordPress “SMTP plugin plus a list plugin” on one credential is the usual mess.

Do not invent MailerZ webhooks that do not exist.

Open relay is 550.

SOC 2 is not a reason to pick an API in this article.

Technical mail flow

smtp vs email api flow
Exclusive MX. SRS envelope. Header From intact.

Operational: app → SMTP → MailerZ → recipient. Replies → MX → alias.

Campaign: app → ESP API → ESP IPs → recipient. Unsubscribes at the ESP.

Do not dual-From without a plan.

Caps on MailerZ are published per plan.

History is hop evidence, not a campaign dashboard.

Step-by-step setup / decision path

smtp vs email api steps
Map, exclusive MX, third-mailbox probe.
  1. Write the stream type.
  2. If operational, copy dashboard SMTP into env.
  3. If campaign, pick an ESP. Do not use MailerZ as the ESP.
  4. Keep From identities honest.
  5. Exclusive MX for replies you want.
  6. Probe operational mail to a third mailbox.
  7. Rate-limit app loops.
  8. Quote plan caps.

Classify the next failure before a second DNS edit.

HOLD unknown unless you wrote a FORWARD reason.

Quote live pricing before promising alias counts.

Failure modes and proof

List on reply SMTP: cap and filters.

API for five receipts: extra vendor.

Free SMTP: refuse.

Invented MailerZ API: does not exist as a campaign API.

Hardcoded ports.

Self-send.

Leftover MX on replies.

Inboxing table.

Open relay.

Secrets in git.

Dual MX.

Header rewrite demand.

MailerZ workflow and product boundary

MailerZ is custom-domain aliasing and forwarding with optional paid send-as. Secuno LLC operates mailerz.net. The app is mail.mailerz.net. Not Workspace, not IMAP, not an open relay, not a campaign ESP.

Envelope SRS only. Header From, Subject, Date, Message-ID, body, and MIME stay intact. Exclusive MX. Hold unknown on Free. Copy SMTP host, port, and TLS or STARTTLS from the dashboard when you send.

Free: one domain, three aliases, one seat, fourteen-day store, fifty outgoing a month, no send-as. Solo forty dollars a year, fifteen aliases, ninety-day store, one hundred outgoing, five send-as per hour. Starter eight or eighty. Business nineteen or one hundred ninety. Agency thirty-nine or three hundred ninety. Quote pricing. No SOC 2, ISO, HIPAA, SLA, or inboxing percentage.

Cost, alternatives, and trade-offs

An ESP costs money and saves your operational identity.

MailerZ Solo is cheap for receipts.

Wrong aisle costs reputation.

Agencies: two line items.

Caps exceeded look like outages.

Leftover MX costs replies, not campaigns.

Secrets leaks cost rotate time.

No fake SLA.

Operational depth

Put the stream name in the ticket: receipt, form, cron, newsletter. Only the last one is an ESP default.

If a developer says “we will just raise the cap,” they want a campaign product.

Cron alerts should be rare and boring. If they are not, fix the cron, not SMTP.

Inbound replies to operational From addresses need mapped aliases.

Staging must not use production ESP or production MailerZ SMTP.

Document who owns unsubscribes. MailerZ will not be your preference center.

Exclusive MX still matters when the API is an ESP and inbound is MailerZ. Two jobs, one zone inbound owner.

Quote Solo versus Starter when outgoing grows. Do not invent unlimited.

No inboxing percentage in the architecture review.

Rotate SMTP and API keys on offboard.

Probe both paths separately.

Keep CAN-SPAM obligations on the list path. This article will not legal-advise; it will say lists are not reply SMTP.

Worked scenarios for SMTP vs an email API

A SaaS ships password-reset and invoice mail from one Node process. Volume is dozens a day. That is operational SMTP. Paid MailerZ, dashboard host and port, env credentials, Header From set to a hosted alias. Do not buy a campaign API for this. Do not point the same client at a newsletter list. Caps exist. Confirm /pricing. Free has no send-as; a 550 here is the product working.

A founder pastes a 4,000-row CSV into a script that opens SMTP and loops. That is a list. Buy an ESP API with suppression and bounce handling. MailerZ SMTP is not a bulk hose. Hitting the hourly or monthly cap is not a bug. It is the wall that keeps a hop from becoming an open campaign path.

A WordPress form plugin offers 'email API' as a logo wall and 'SMTP' as a host field. If the job is contact-form replies as hello@yourdomain, SMTP is the class. Copy dashboard values. Do not invent 587. If the plugin also wants to drip a sequence, that sequence belongs on an ESP. Mixing both through one secret is how you rotate after a leak and still miss which product sent.

A mobile app wants device-to-user alerts. Low volume, transactional, same domain as inbound support. SMTP or a transactional API can both work. MailerZ is SMTP. If you already pay an ESP for receipts, stay there. Do not add a second From identity on leftover MX. Exclusive inbound still matters so replies to those alerts land.

An agency inherits a Laravel app with MAIL_MAILER=smtp and a forgotten Mailgun key in staging. The decision is not 'which logo is cooler.' It is which job is live. Production receipts: one paid MailerZ identity. Staging: a sink or a separate identity. Shared secrets across clients are a later article and a current incident.

A developer wants webhooks for every bounce class and template versioning across locales. That is an email API product. MailerZ gives hop history and SMTP response codes, not a template CMS. Choose the API. Keep MailerZ for inbound MX if that is still the receive path.

Practice and anti-patterns when choosing the client

Practice: write the job in one sentence—receipt, form, cron, or list. Anti-pattern: 'we just need email' as the architecture.

Practice: copy dashboard SMTP. Anti-pattern: folklore ports from a 2014 Stack Overflow answer.

Practice: one identity per app environment. Anti-pattern: production secret in the laptop .env that also deploys to a client staging box.

Practice: third-mailbox proof of Header From. Anti-pattern: self-send from the destination Gmail as the only test.

Practice: lists on an ESP. Anti-pattern: a for-loop over SMTP until the cap or until filters heat.

Practice: Free users stay inbound-only. Anti-pattern: a README that says start free and send. They will 550 and file a bug.

Practice: leftover MX is still a hard stop for replies. Anti-pattern: perfect SMTP and a split inbound so customers answer into a dead Google seat.

Operator closeout after you pick a path

Closeout names the job, the client type (SMTP or API), the plan, and the identity. If the job is a list, the MailerZ row should say 'not used for this stream.'

If SMTP, closeout includes env var names, not values, and a rotate owner. If API, closeout includes the ESP project and the From domain alignment story. Do not leave both live 'for now' on the same From without a reason.

A unique third-mailbox message is in the packet. 250 is not inboxing. Caps are walls. Confirm /pricing if you already looped.

Inbound MX exclusive if replies matter. A website that sends as hello@ and cannot receive hello@ is a dead letter. That is the next article's job; mention it here so the closeout is not outbound-only.

Agencies attach which client owns the secret. Shared agency SMTP across ten brands is how one gist burns ten letterheads.

Schedule a quarterly cap review. Volume creeps. A receipt stream that becomes a digest blast needs an ESP, not a higher hope.

Edge cases in the SMTP versus API split

You need both: receipts on SMTP and a newsletter on an ESP. That is fine. Two products, two From stories, one exclusive MX for inbound. Do not publish two MX owners to 'balance' them.

The framework only speaks API and you still want MailerZ. Then you need a library that can speak SMTP, or you should stay on the API you already have. Do not wrap SMTP in a fake REST you will not maintain.

Serverless cold starts plus SMTP handshake timeouts look like 'SMTP is unreliable.' Timeouts are a client setting. Classify before you flee to an API. Also classify 550 unauthorized versus 421 deferral. Different tickets.

A vendor demands their API for 'compliance.' MailerZ is not SOC 2. /security is the page. An ESP badge does not make leftover MX safe. Do not swap products to invent a certification.

Open-relay nostalgia: a container that accepts mail without AUTH. MailerZ will 550 unauthorized senders. That is the feature. If your code cannot hold a secret, fix the code. Do not look for an unauthenticated hop.

Plus-addressing at Gmail is not an API and not custom-domain SMTP. Do not design the public From as user+app@gmail.com and then ask why the brand looks like a mailbox tag.

Field notes from developer tickets

The quiet tickets pick one job and one client. The loud tickets add SMTP, an API, and php mail fallback 'so something always sends.' Fallback is how you lose the Header From you paid to align.

Caps feel rude until the alternative is a leaked loop. Teach the cap as a design constraint. Quote the live card. Do not recite a blog comment.

WordPress 'email API' marketing is a logo wall. Read whether the plugin submits SMTP. If it does, dashboard values win. If it only speaks one ESP, you are buying that ESP for this site.

RFC 5321 describes the conversation. It does not describe lists. Developers who want both in one SDK are asking for a suite. MailerZ is a hop plus authenticated send-as.

Link /send-reply and /docs. Inbound is /email-forwarding. Do not hide Free's no-send-as in a footnote the intern never sees.

Self-send still lies after a 250. Open a third mailbox. That rule does not change because you used nodemailer instead of curl.

Handoff memo for the next engineer

Job, client type, env var names, rotate owner, plan name, inbound MX owner. If that memo is missing, someone will add a second ESP 'just for reliability' and you will have leftover sending plus leftover MX.

Dashboard is the source for host, port, and TLS mode. The memo says copy again on rotate. Ports are not folklore.

Lists are named as out of scope. If product later wants a digest, the memo points at an ESP, not at raising a MailerZ loop.

Free versus paid is explicit. A new hire who tests AUTH on Free should expect 550 and not open a Sev-1.

Probe instructions: unique subject, third mailbox, Header From check. No self-send gate.

Acceptance criteria for the choice

The stream has one job sentence. SMTP or API is written. Caps match the plan you bought.

Secrets are in env, not in git. Rotate owner exists. Free was not promised send-as.

A third-mailbox probe shows the intended Header From. Leftover MX is absent if replies matter.

No campaign loop on MailerZ SMTP. No invented inboxing percentage in the README.

No SOC 2, ISO, or HIPAA claim as a reason to pick an API. Pick an API for lists. Pick SMTP for operational mail.

php mail or sendmail fallback is off in production if you claimed SMTP alignment.

Operations review of outbound clients

Inventory every app that can send as the domain. Each row: SMTP or API, identity, env location, last rotate. Mystery senders are incidents waiting for a gist.

Review volume against /pricing. If you are near a cap, you either need a plan conversation or you accidentally grew a list.

Review leftover MX. Perfect SMTP does not fix inbound splits.

Review WordPress and cron boxes for hardcoded hosts. Env drift is how staging sends as production.

Review whether anyone enabled an open fallback. Turn it off.

Start free on a lab for inbound. Pay before the first AUTH. The first production 550 should be a documented test, not a launch.

Quarterly review of SMTP versus API

Did a receipt stream become a newsletter? Move lists. Keep SMTP for receipts.

Did anyone commit a secret? Rotate. Rewrite history if the repo is public. Then fix gitignore.

Did dashboard values change? Update env. Do not keep last year's host from memory.

Did we invent a port in the wiki? Delete it. Link the dashboard.

Did we promise inboxing? Retract. 250 is a hop, not a tab.

Author: MailerZ editorial, Secuno LLC. Review when caps, pricing, or scope change.

Closing notes on picking the thinner client

SMTP vs email API is a job split. MailerZ SMTP is authenticated, low-volume, domain send-as. An email API is a vendor product for lists, templates, and webhook-heavy streams. Do not force either to be the other.

Copy the dashboard. Keep secrets in env. Keep leftover MX deleted so replies live. Free has no send-as. Caps are walls. Start free for inbound, pay for operational SMTP, buy an ESP when you have a list.

Product path: /send-reply, /docs, /features, /pricing. No invented ports. No campaign hose. No badges.

People and deputies for outbound mail

Name the engineer who may create SMTP users, the person who may rotate them, and the product owner who decides a stream is a list. If those three are the same exhausted founder, write it down anyway. Deputies exist so a vacation does not produce a second ESP 'for reliability.'

Developers will add a client because a tutorial used one. Product will add a list because marketing asked. Finance will notice the cap or the ESP invoice. The deputy model is who can say no to a for-loop. Without that no, SMTP versus API is a mood.

Agencies need a named client owner for each secret. A bench developer with every client's MAIL_PASS is an incident scheduled for their next gist. Offboard the bench the same week you offboard the laptop.

Support should know Free has no send-as. Otherwise every 550 becomes a DNS ticket. Train the phrase: paid plan, dashboard copy, third mailbox. Not leftover MX. Not a new API.

If nobody owns the README, folklore ports return. Assign the README. Delete numbers that are not from the dashboard. This is people work, not protocol work.

Proof packet for an SMTP or API decision

The packet is one job sentence, one client type, plan name from the live /pricing card, env var names, a unique third-mailbox message ID, Header From screenshot, and leftover MX listings if replies matter. Values of secrets do not belong in the packet.

If you chose an ESP API, the packet includes the project name and why lists do not use MailerZ SMTP. If you chose SMTP, the packet includes a written ban on CSV loops. Future you will try the loop. The sentence has to exist.

A failed AUTH transcript with the code is better than 'it doesn't work.' 550 unauthorized on Free is expected. 535 on a typo is a pair. 421 is a later retry. Classify in the packet so the next engineer does not flap MX.

Caps at the time of the packet matter. If you already looped tests, write how many. Confirm the card before the next loop. 250 is not inboxing. Do not put a percentage in the packet.

Agencies attach which brand owns the From identity. Shared From across brands is a proof of a bad design, not a proof of efficiency.

Appendix: questions that look like protocol and are not

Is SMTP more reliable than an API? Reliability is retries, timeouts, and the far side. MailerZ SMTP is a client conversation. An API is a vendor's HTTPS plus their own SMTP later. Pick for job, not for a reliability myth.

Can we keep php mail as backup? Only if you accept unsigned, unstaffed, web-host From identities. That backup is how you lose the alignment you paid for. Prefer fail loud.

Can we use Gmail SMTP to send as the domain? That is a different product path and often a Workspace story. MailerZ send-as is MailerZ AUTH. Do not mix secrets. Do not invent ports from Gmail's help center as MailerZ facts.

Do we need webhooks? If you need per-message lifecycle at list scale, you want an ESP. MailerZ hop history is for operational proof, not a drip campaign state machine.

Does leftover MX affect AUTH? Not directly. AUTH is the outbound pair. Leftover MX breaks replies and inbound proof. Still delete leftovers. Still do not use leftover MX as an AUTH fix.

Where do we put the secret? Environment, platform store, or a secrets manager. Not git. Not Slack. Not .env committed as .env.example. Rotate if any of those happened.

More operator notes on volume and heat

Operational mail is a receipt, a form copy, a cron alert, a password reset. If you cannot name the recipient as a person who did a thing, you may have a list. Lists heat filters when forced through a hop that was sized for operations. Caps exist so that heat is your problem early, not the internet's problem late.

Developers like one SDK. Product likes one vendor. The honest small-team design is often two vendors with two jobs: MailerZ for the domain hop and send-as, an ESP for the newsletter. One vendor for both jobs is a suite or a compromise. MailerZ will not become the ESP because the SDK is prettier.

Copy the dashboard every time you rotate. Hosts and TLS modes are not tribal knowledge. A wiki that says 587 as a MailerZ constant is a defect. Delete it.

Start free for inbound on a lab. Pay before AUTH. Probe once. Then ship. A launch week of SMTP loops is how you meet the cap and still have no proof packet.

Internal links that stay honest: /send-reply, /docs, /features, /pricing, /email-forwarding. External spine: RFC 5321. No competitor win-rate. No inboxing percent. No SOC 2.

If this article disagrees with a sales deck that implied campaigns, the deck is wrong. Fit over trophies. Operational SMTP versus list API is the whole review.

FAQ

What is the safest way to handle smtp vs email api?
If the stream is transactional and low volume, paid MailerZ SMTP with env credentials is enough. If the stream is a list, buy an ESP API. Do not force either to be the other. Exclusive MX still applies for inbound replies.
Does this require a new mailbox?
No. MailerZ is not IMAP. Keep Gmail or Outlook unless you need a suite for other reasons.
Will it work with Gmail or Outlook?
Yes as destinations. Self-send is not proof. Use a third mailbox and open original.
What DNS records are involved?
Exclusive MX, verification TXT, one SPF if you send-as. Leftover MX is a hard stop. Dashboard values only for sending.
What should I test before production?
A uniquely titled probe from an unrelated provider to each public alias. Confirm Header From and hop history.

Key takeaways

  • Operational SMTP vs list API.
  • MailerZ is not an ESP.
  • Dashboard values only.
  • Free has no send-as.
  • Map aliases for replies.
  • Rate-limit loops.
  • Separate staging.
  • No inboxing percentage.

Conclusion

Match the protocol to the job. Receipts can be SMTP. Lists should not. Exclusive MX still owns inbound.

Start free to prove the domain hop, then add paid SMTP or an ESP with your eyes open.

Start free on MailerZ