Cookies on softitland.com

We use essential storage to run this site. With your permission we would also like to use analytics cookies to see which pages help visitors, and marketing cookies to measure our ads. You can change your choice at any time with “Cookie settings” in the footer. Privacy Policy

Web development

Transactional email from your app: Amazon SES, Postmark or SendGrid?

How to pick a provider for password resets, receipts and alerts: Amazon SES, Postmark or SendGrid, with sandbox rules, bounces, webhooks and pricing.

Cover image for the article Transactional email from your app: Amazon SES, Postmark or SendGrid?
Key takeaways
  • Transactional email is the mail your app sends because a user did something: sign-in codes, password resets, receipts and alerts.
  • Amazon SES is the cheapest per email and suits teams on AWS, but you build more of the logging and bounce handling yourself.
  • Postmark focuses on transactional email and runs it on separate infrastructure from bulk mail.
  • SendGrid covers transactional and marketing email in one account, with a free trial and paid plans by volume.
  • Whichever you pick, send from a background job, store delivery events and stop sending to addresses that hard bounce.

Which transactional email provider should your app use?

For most apps the choice comes down to price per email, how much your team wants to build, and whether marketing email goes through the same account. Amazon SES is the cheapest per email and fits apps already on AWS, but you set up more yourself. Postmark focuses on transactional email and keeps it apart from bulk mail. SendGrid handles both transactional and marketing email in one place. Whichever you choose, send from a queue, record delivery events and stop mailing addresses that bounce.

The provider matters less than the plumbing around it. Our custom software team treats email as a feature with its own queue, logs and error handling, not as one line of code at the end of a checkout.

What counts as transactional email?

Transactional email is sent to one person because of something they did or something that happened to their account:

  • Sign-in codes, email verification and password resets.
  • Receipts, invoices and order or booking confirmations.
  • Alerts, such as a failed payment, a new message or a shipment update.
  • Account changes, such as a new device sign-in or a changed email address.

Newsletters, promotions and product announcements are marketing email, sent to many people at once. Keep the two apart. If a promotion draws spam complaints, you do not want that to delay the password reset a customer is waiting for. The domain setup that both need, SPF, DKIM and DMARC, is covered in our guide to email deliverability and the Gmail and Yahoo sender rules.

When is Amazon SES the right choice?

SES suits teams that already run on AWS, send a lot of email, and are comfortable building some of the tooling themselves. When we checked in November 2026, the pay-as-you-go rate on the Amazon SES pricing page was $0.10 per 1,000 emails, with attachment data and dedicated IPs charged separately. The same page also lists plan tiers at higher rates per email.

Two things surprise new users. First, every new account starts in a sandbox in each AWS Region: you can only send to verified addresses, up to 200 messages in 24 hours and 1 message per second, until you request production access. AWS says it gives an initial response within 96 hours, according to its guide to moving out of the SES sandbox. Plan that request before launch week.

Second, SES gives you the raw events, not a ready-made dashboard. Accounts created after November 2019 use an account-level suppression list for bounces and complaints by default, according to the SES suppression list guide. Delivery, bounce, complaint, open and click events reach your app through configuration sets that publish to services such as Amazon SNS or EventBridge, as described in the SES event publishing guide. Someone has to wire that up, which is work our cloud and DevOps team does as part of the AWS setup.

When is Postmark the right choice?

Postmark suits apps where transactional email is critical and the team wants clear logs without building them. Its Message Streams run transactional and broadcast email on separate infrastructure, and Postmark says the two never share IP ranges (Postmark Message Streams).

On the Postmark pricing page in November 2026, a free plan covered 100 emails a month, and paid plans started at $15 a month for 10,000 emails, with a price for each extra 1,000. The Basic plan keeps message data for 45 days; higher plans allow longer retention as an add-on. Delivery, bounce, open, click, spam complaint and subscription change events can be sent to your app by webhook (Postmark webhooks overview).

The trade-off is cost at high volume: per email, Postmark costs more than SES. For apps sending thousands rather than millions of emails a month, the time saved on tooling usually matters more.

When is SendGrid the right choice?

SendGrid suits businesses that want transactional and marketing email under one account and one set of reports. On the SendGrid Email API pricing page in November 2026, a free trial allowed 100 emails a day for 60 days, paid plans started at $19.95 a month with the price rising by volume, and a dedicated IP was included from the Pro plan up.

Its Event Webhook posts delivery events (processed, delivered, deferred, dropped and bounced) and engagement events (opens, clicks, spam reports and unsubscribes) to your app. SendGrid recommends securing it with a signed webhook, OAuth or both (SendGrid Event Webhook reference). Verify the signature before you trust an event.

How do the three compare?

QuestionAmazon SESPostmarkSendGrid
Best fitAWS teams, high volume, tight cost controlApps where transactional email is criticalOne account for app and marketing email
Setup workHighest: sandbox request, events and logs to buildLow: logs and streams includedLow to medium
Marketing emailPossible, keep it on a separate configurationSeparate broadcast streamBuilt in, with marketing tools
Delivery eventsConfiguration sets to SNS, EventBridge and othersWebhooks by event typeSigned Event Webhook

Prices change, so read each pricing page on the day you decide and estimate your own monthly volume, including resets, receipts and alerts, not just sign-ups.

How should the app handle bounces and complaints?

  • Store every event against the message and the user, so support can see what happened.
  • Stop sending to hard bounces. The address does not exist or refuses mail; retrying only hurts your reputation.
  • Treat complaints seriously. Stop all non-essential email to that person and check what they received.
  • Tell the user in the app when their address bounces, and ask them to correct it, instead of failing silently.
  • Know the gaps. The SES guide notes that Gmail does not send complaint data to SES, so a Gmail user who marks your mail as spam is not added to your suppression list (SES suppression list guide).

How should the app send the email?

Never send email inside the web request. Put it on a queue so a slow provider cannot hang the checkout, and so failures are retried. Our guide to background jobs and queues covers the setup. Give each email a unique key so a retry cannot send the same receipt twice.

Keep templates in your code repository, where they are reviewed and tested, and send from a subdomain such as mail.yourdomain.com so its reputation is separate from your main domain. In Laravel, the mail system ships with drivers for SMTP, Mailgun, Postmark, Resend and Amazon SES, and a failover mailer that tries a second service if the first one fails (Laravel mail documentation). Our Laravel development team uses that to keep the provider a configuration choice rather than a rewrite.

Can you switch providers later?

Yes, if the app sends through one mail layer rather than calling a provider's API from many places. A switch then means new credentials, new DNS records for the sending domain, new webhook handlers for events and a period of watching delivery closely. Move one message type at a time, starting with the least critical, and keep the old provider active until the new one has a clean record.

Frequently asked questions

Can we send transactional email from our own server instead?

You can, but it rarely pays off. Running your own mail server means managing its reputation, blocklists, authentication records and bounce handling, and a new server starts with no sending history. A provider already has that infrastructure. Keep your server for the app and let the provider handle delivery.

Do we need a dedicated IP address?

Usually not at the start. A dedicated IP only helps when you send steady, high volumes, because its reputation is built by your own sending alone. At low volume a well-run shared pool is often better. Postmark, SendGrid and SES all offer dedicated IPs on certain plans, so you can add one later.

Should marketing email use the same provider?

It can, as long as it is kept apart: a separate stream, a separate sending subdomain, or both. Then a complaint about a newsletter cannot hurt the delivery of password resets. Many teams send product email from the app provider and marketing from their email marketing platform.

How do we test email without sending it to real customers?

Use a local mail catcher in development, the provider sandbox or test mode in staging, and a short list of internal test addresses for final checks. Amazon SES also offers a mailbox simulator for testing bounces and complaints. Never point a staging copy of the app at real customer addresses.

What should the app log for each email?

Store the message type, the recipient, the provider message ID, the time it was queued and sent, and every delivery event that comes back, such as delivered, bounced or complained. Keep the content out of the log if it contains personal data. This lets support answer the common question: did the email actually go out?

Last updated

Start a project

Have a project in mind? Let’s build it.

Tell us what you need. You get a clear plan, a fixed quote and a timeline before any work starts.

Prefer email? info@softitland.com