How to Send a Newsletter with Amazon SES (Step by Step)
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?
- An AWS account
- A domain you own, with access to its DNS settings
- Your subscriber list as a CSV, including who has unsubscribed
- A newsletter app that supports SES, such as EazyEmailer, Sendy or Listmonk
Step-by-step: send your first SES newsletter
- Pick an SES region. Choose one close to you or your audience and use it everywhere. Quotas and identities are per region.
- 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.
- Set up SPF and a custom MAIL FROM domain. Use a subdomain such as
mail.yourdomain.comso SPF aligns with your domain. Details in SPF, DKIM and DMARC for SES. - Publish a DMARC record. Start with
v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comand tighten it later. - Request production access. New accounts start in a sandbox that only sends to verified addresses. See How to get out of the SES sandbox.
- 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.
- Handle bounces and complaints. Create a configuration set that sends bounce and complaint events to your app, so those addresses are suppressed automatically.
- Connect your newsletter app and import your list. Paste the credentials, import your CSV, and make sure past unsubscribes stay unsubscribed.
- 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.