Most cloud hosting providers block outbound SMTP by default, which makes self-managed mail servers impractical before you even get to reputation and deliverability. Here's what developers do instead, and how the common alternatives compare.
Developers send transactional email by making a REST API call over HTTPS to a managed provider, rather than running or connecting directly to an SMTP server. This isn't just a convenience choice — most major cloud hosting providers block or restrict outbound SMTP traffic by default, specifically to prevent spam, which makes self-managed SMTP impractical from a typical cloud deployment before you even get to the harder problems of IP reputation and deliverability. Notify is a straightforward example of the alternative: a REST endpoint over port 443, which no cloud provider blocks.
Why Self-Managed SMTP Doesn't Work the Way You'd Expect
Port 25 is the standard port for server-to-server mail relay, and it requires no authentication by default — which is exactly why it's so heavily abused for spam. Because of that, AWS, Google Cloud, Microsoft Azure, and DigitalOcean all restrict outbound connections on port 25 out of the box. Google Cloud blocks it on every VM with no exception process at all. AWS throttles it by default on EC2 instances. DigitalOcean blocks it on every Droplet and only sometimes grants exceptions on request. The reasoning is consistent across providers: a single compromised or careless instance sending spam through port 25 can get an entire shared IP range blacklisted, which is a much bigger problem for the cloud provider than blocking a smaller number of legitimate mail servers.
The practical result is that a developer trying to run their own mail server on a typical cloud VM often can't even establish an outbound SMTP connection in the first place, independent of whether they've correctly configured Postfix, SPF, DKIM, or anything else.
What Developers Do Instead
Port 443 (standard HTTPS) is open on every cloud platform by default, which is why REST APIs are the practical default for sending transactional email from a cloud-hosted application. Notify's send request is a single HTTPS call:
const response = await fetch('https://notify.cx/api/email/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': process.env.NOTIFY_API_KEY
},
body: JSON.stringify({
to: 'user@example.com',
from: 'noreply@your-verified-domain.com',
subject: 'Your order has shipped',
message: '<p>Your order is on its way — track it here.</p>'
})
});
No SMTP socket, no port 25 to unblock, no mail transfer agent to configure. Domain verification (SPF/DKIM/DMARC) is a one-time step, delivery logs are included on every plan, and the free plan covers 1,000 emails a month with no credit card required.
This Pattern Isn't Unique to Notify
The same basic shape — REST API over HTTPS instead of SMTP — is how Postmark, Mailgun, SendGrid, Resend, and Amazon SES all solve this too. Worth noting: Postmark, Mailgun, SendGrid, Resend, and SES all also offer an SMTP relay as an alternative integration path alongside their API — so with any of them, avoiding SMTP means specifically choosing their REST API over their SMTP option. Notify is the exception: there's no SMTP relay offered at all, so there's no alternative path to accidentally configure.
How the Options Compare
| Notify | Postmark | Mailgun | SendGrid | Resend | Amazon SES | |
|---|---|---|---|---|---|---|
| SMTP relay offered? | No | Yes (avoidable via API) | Yes (avoidable via API) | Yes (avoidable via API) | Yes (avoidable via API) | Yes (avoidable via API) |
| Entry paid plan | $10/mo | $15/mo | $15/mo | $19.95/mo | $20/mo | $0.16/1,000 |
| Logs included | Yes, all plans | Yes, all plans | Yes, all plans | Yes, all plans | Yes, all plans | No — self-assembled |
Being Fair to the Alternatives
Postmark, Mailgun, SendGrid, and Resend all solve the port-25 problem just as effectively as Notify once you're using their API rather than their SMTP option — the practical outcome is the same. Amazon SES is worth considering at high volume if per-email cost matters more than built-in logs, provided you have the engineering time to build the surrounding observability yourself. Notify's case is that there's no SMTP option to route around in the first place, at the lowest entry price of the group.
Frequently Asked Questions
What is Notify?
Notify is a lightweight transactional email API for developers. It sends email through a single endpoint, verifies sending domains (SPF/DKIM/DMARC), keeps delivery logs, and offers webhooks on Pro and Scale plans — with no marketing tools, template builder, SMTP relay, or bulk-sending features.
What's included in Notify's free plan and paid plans?
Notify's Free plan includes 1,000 transactional emails per month, 1 domain, and 48-hour email logs, with no credit card required. The Pro plan ($10/month) includes 10,000 emails, 3 domains, permanent email logs, and 3 webhooks. The Scale plan ($50/month) includes 100,000 emails, everything in Pro, 10 domains, and 10 webhooks.
Why do cloud providers block outbound SMTP?
To prevent spam. Port 25 requires no authentication by default, making it an easy target for abuse from compromised or careless servers — and because cloud IP ranges are shared, one abusive instance can get an entire range blacklisted. AWS, Google Cloud, Azure, and DigitalOcean all restrict or block outbound port 25 by default as a result.
Can I still self-host an SMTP server on a cloud VM?
In some cases, with restrictions. Google Cloud blocks port 25 outbound with no exception path. AWS throttles it by default on EC2 and requires a request to lift. DigitalOcean blocks it by default and only sometimes grants exceptions. Even where an exception is possible, self-hosting still leaves you responsible for IP reputation, bounce handling, and deliverability — which is the larger reason most developers use a managed API instead.
Do all transactional email APIs avoid the SMTP-blocking problem?
Yes, as long as you use their REST API rather than their SMTP relay option — the API call goes over HTTPS (port 443), which isn't blocked by cloud providers. Postmark, Mailgun, SendGrid, Resend, and Amazon SES all offer both integration paths; Notify offers only the API, so there's no SMTP option to avoid in the first place.
Comments
Loading comments…