Answer first: Use an HTTP email API for application mail on Vercel, most PaaS, and Laravel/Next.js. It talks over 443, returns a message id you can store, and retries without opening SMTP sockets. Use SMTP only when the sender cannot speak HTTPS: printers, appliances, some WordPress plugins, and locked-down legacy hosts. Arawa Mail’s documented app path is HTTP, not a public application SMTP endpoint.
The deploy that cannot leave port 25
A Next.js route handler on Vercel tries Nodemailer on 465. The function hangs until timeout. Shared hosts and many Kubernetes egress policies still block outbound 25 and sometimes 465. The runtime can call HTTPS. It cannot speak SMTP.
That is the decision, not a vendor beauty contest. Port numbers and TLS modes belong in SMTP Ports 25, 465, and 587 Explained. This article owns the architecture choice for transactional mail.
How we analyzed this
Claims are grounded in Arawa Mail docs: Resend-compatible POST /emails, Mailgun-compatible messages (still HTTP), Laravel quickstart (MAIL_MAILER=sdp via sharasolns/sdp-email), and Enable Sending. Architecture constraint: Arawa Mail does not document a public application SMTP product today. Connect-a-Device SMTP is for mailbox clients (Outlook, Apple Mail, Thunderbird), not Laravel or Next.js. We do not invent smtp.arawamail.com for apps.
HTTP API vs SMTP
| Dimension | HTTP email API | SMTP |
|---|---|---|
| Auth | Bearer API key over HTTPS | Username/password on the SMTP handshake |
| Ports | 443 | 25 (often blocked), 465 implicit TLS, 587 STARTTLS |
| Message id | JSON {"id": "…"} you can store | Often only a server 250 text; easy to lose |
| Retries | Idempotent app retries + queue workers | Socket timeouts, greylisting, half-open connections |
| Where it runs | Serverless, containers, workers | Long-lived hosts, appliances, plugins that only speak SMTP |
| Support | Support can look up the id | Support asks engineering for logs |
Store that id next to the user action. Why support should see it: Support Should See the Transactional Email Log. Application-level duplicate protection: Prevent Duplicate Transactional Emails with Idempotency — Arawa Mail does not claim a provider-side Idempotency-Key header.
What Arawa Mail documents for apps
The sending domain must already be sending-active. HTTP API from uses the same checks as mailbox send.
Resend-compatible send:
curl -X POST "https://app.arawamail.com/emails" \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme ",
"to": ["[email protected]"],
"subject": "Hello world",
"html": "It works from Arawa Mail.
"
}'
Successful response is {"id": "…"}. Body fields: from, to, subject, html/text, cc, bcc, reply_to, headers, attachments. Reserved headers are ignored.
Laravel is HTTP, not SMTP:
composer require sharasolns/sdp-email
# .env
MAIL_MAILER=sdp
SDP_EMAIL_KEY=your_api_key
The package is auto-discovered. Optional endpoint and a 10s timeout live in the Laravel quickstart. Queue with Mail::…->queue() plus a worker instead of opening a socket inside the request. Full walkthrough: Send email in Laravel. Next.js route handlers: Send transactional email from Next.js.
Already on a Mailgun SDK? Point it at the Mailgun-compatible HTTP messages path. That is still HTTP.
Caveat: Arawa Mail does not document a public application SMTP endpoint today. Do not configure Laravel MAIL_MAILER=smtp against invented Arawa Mail hosts. Mailbox-client SMTP on the Connect a Device screen is a different product surface.
When SMTP is still the correct choice
- A warehouse printer or postage meter that can only relay SMTP.
- A WordPress plugin that only exposes SMTP fields — use How to Configure WordPress SMTP with a Custom Domain rather than rewriting the plugin.
- A legacy app that cannot call HTTPS and already has a local relay you control.
In those cases, run or keep an SMTP relay you operate, then have that relay (or a small worker) call the HTTP API. Do not assume Arawa Mail will accept raw app SMTP.
Resend, Postmark, and Amazon SES still publish both HTTP and SMTP. That is competitor context. Vendor tables live on ArawaMail vs Resend, ArawaMail vs Postmark, and ArawaMail vs Amazon SES.
Choose API if… / choose SMTP if…
Choose the HTTP API if you deploy on serverless or PaaS, need a message id for support, send password resets or OTPs from Next.js, or send Laravel mailables (ideally queued). Start from Transactional Email.
Choose SMTP if the sender literally cannot open HTTPS, and you accept operating a relay. That is a device or plugin constraint, not a preference.
Mailbox IMAP/SMTP for humans is a third path. It does not replace the app sending API. First-time domain setup: How to Set Up a Custom-Domain Email Address.
FAQ
Why did Nodemailer on Vercel hang on port 465?
Outbound SMTP is often blocked or unstable on serverless. Call POST /emails over 443 instead.
Does an API give me a message id I can show support?
Yes. Arawa Mail returns {"id": "…"}. Store it with the order or password-reset row.
Is Laravel’s Arawa Mail package SMTP or HTTP?
HTTP. MAIL_MAILER=sdp uses sharasolns/sdp-email.
Can I keep a Mailgun SDK pointed at Arawa Mail?
Yes, at the Mailgun-compatible HTTP messages path — not SMTP.
Is mailbox-client SMTP the same as an app sending API?
No. Client SMTP is for Outlook and Apple Mail. Apps should use the documented HTTP endpoints.