How to Send a Newsletter with Amazon SES (Step by Step)

By Proshanto Gupta · Updated

To send a newsletter with Amazon SES, verify your domain in SES, add DKIM, SPF and DMARC records, request production access, create sending credentials, and connect them to a newsletter app that manages your list and unsubscribes. SES itself has no subscriber management, so you need an app on top. Expect a few hours plus DNS and AWS review time.

Why can't I just send a newsletter from the SES console?

SES is a delivery service, not a newsletter tool. It has no subscriber lists, no editor, no unsubscribe pages and no campaign reports. A newsletter app handles those parts and uses SES only to deliver.

What do I need before I start?

Step-by-step: send your first SES newsletter

  1. Pick an SES region. Choose one close to you or your audience and use it everywhere. Quotas and identities are per region.
  2. Verify your domain. In SES, create a domain identity. Turn on Easy DKIM and add the three CNAME records SES gives you to your DNS.
  3. Set up SPF and a custom MAIL FROM domain. Use a subdomain such as mail.yourdomain.com so SPF aligns with your domain. Details in SPF, DKIM and DMARC for SES.
  4. Publish a DMARC record. Start with v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com and tighten it later.
  5. Request production access. New accounts start in a sandbox that only sends to verified addresses. See How to get out of the SES sandbox.
  6. Create sending credentials. Create an IAM user with permission to send through SES only. Generate API keys or SMTP credentials, depending on what your app needs.
  7. Handle bounces and complaints. Create a configuration set that sends bounce and complaint events to your app, so those addresses are suppressed automatically.
  8. Connect your newsletter app and import your list. Paste the credentials, import your CSV, and make sure past unsubscribes stay unsubscribed.
  9. Send a test, then send for real. Send to yourself on Gmail and Outlook first. On a new domain, start with your most engaged readers. See How to warm up a new sending domain.

How does EazyEmailer fit in?

EazyEmailer is a self-hosted newsletter app built on Amazon SES. You deploy it, paste your SES keys, and manage lists and campaigns from its dashboard, with no monthly or per-subscriber fees. It checks that your sender address is verified in SES before a campaign goes out, imports contacts from CSV into groups, and sends plain-text or HTML campaigns to everyone or to one group. Steps 1–7 above still happen in your AWS account.

FAQ

How long does SES production access take?

AWS usually responds within about a day. A clear, specific request gets approved faster.

Do I need a dedicated IP for a newsletter?

Usually not. SES's shared IPs work well for most newsletters. A dedicated IP only helps with steady, high volume.

Can I use SES with a Gmail address as the sender?

No. You need to send from a domain you control. Gmail's rules also forbid impersonating gmail.com in the From header.

What happens to bounced emails?

SES reports them to your configuration set. Your app should suppress hard bounces so you never email them again.

Send through your own Amazon SES account

EazyEmailer is a self-hosted email marketing app on Amazon SES: $30 once, with the full source code and setup help. You pay AWS about $0.10 per 1,000 emails.

See EazyEmailer
Proshanto Gupta
Proshanto Gupta built EazyEmailer. He is the founder of ProSofts, where he builds apps and backends for startups, and runs EazyEmailer on Amazon SES himself. More about him.