Switching guide

Moving from Amazon SES to getread

SES keeps sending while you set things up, so there’s no rush. Here’s what comes with you, and how to move it one step at a time.

What comes with you

  • Your domain. Authenticate it with getread alongside your SES records.
  • Your suppression list. Export it, so people who bounced or complained stay suppressed.
  • Your templates. Paste the HTML from your SES templates into saved getread templates.
  • Your bounce and complaint handling. getread webhooks take over from SNS or EventBridge.

One thing to know before you start: getread sends over an HTTPS API, and there’s no SMTP relay. If your app sends through the SES SMTP interface, you’ll swap that for one API request. Instead of AWS credentials and signed requests, you send a scoped API key as a Bearer token, from any language, with no SDK to install.

1. Verify your domain

Add your sending domain in getread. Domain setup walks you through DKIM, SPF and DMARC, shows the exact records for your domain and checks them for you.

  • Your Easy DKIM CNAMEs and any custom MAIL FROM records can stay where they are. getread’s DKIM keys live under their own names, so both can sign your email at the same time.
  • A domain only ever has one DMARC record. If you already have one, keep your policy and add getread’s reporting address to its rua list.

2. Bring your contacts

Most SES senders keep their contacts in their own database, and that doesn’t change. Your app keeps sending transactional email to the people it already knows.

If you send newsletters, export your subscribers as a CSV with email, name and tags, and we’ll help you import them into getread’s marketing email. Campaigns only go to contacts with a recorded consent basis, which is how and when they agreed to hear from you, so bring that along if you have it.

If you use the SES account-level suppression list, export it too (for example with aws sesv2 list-suppressed-destinations) and send it along with your contacts. Add anyone your own app has marked as bounced or unsubscribed as well.

3. Rebuild or paste your templates

If you use SES templates, aws sesv2 get-email-template gives you each one’s subject, HTML and text. Paste them into saved getread templates.

  • getread templates use simple variables in double braces, like {{first_name}} or {{order.number}}, filled in from the attributes you send.
  • Variables don’t run logic, so Handlebars {{#if}} blocks and {{#each}} loops won’t work. Work those parts out in your app and pass the finished values, or render the email yourself and send it as html.
  • If you build raw MIME messages today, send the HTML and text parts as html and text instead.

4. Point your send call at getread

Create an API key in getread with permission to send. Then swap your SendEmail call (or SMTP connection) for one request to getread:

curl https://app.getread.com/api/v1/transactional/send \
  -H "Authorization: Bearer $GETREAD_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: invoice-2291-ready" \
  -d '{
    "from_email": "[email protected]",
    "from_name": "Your brand",
    "to": "[email protected]",
    "subject": "Your invoice is ready",
    "html": "<p>Your invoice for October is ready.</p>",
    "text": "Your invoice for October is ready."
  }'

The Idempotency-Key makes retries safe. Send the same key with the same request, and we return the original message instead of sending it twice. If you send in big bursts, watch for a 429 response: wait for the Retry-After time, then retry with the same key.

Here’s how the fields line up with the SES v2 API:

SES SendEmail getread transactional/send
FromEmailAddress from_email, from_name
Destination.ToAddresses to, one recipient per request
Content.Simple.Subject subject
Content.Simple.Body.Html, Body.Text html, text
ReplyToAddresses reply_to
EmailTags tags
Content.Template (TemplateName, TemplateData) template_id, attributes
ConfigurationSetName Not needed

When you send a template_id, include the subject too. It can use the same variables as the template.

5. Reconnect your webhooks

With SES, bounces and complaints usually reach your app through SNS topics or configuration set event destinations. In getread, add a webhook endpoint and choose the events you want, such as email.bounced, email.complained and email.opened, plus email.clicked for campaigns. getread doesn’t track clicks in transactional email. Each endpoint gets its own signing secret, so your handler can check that an event really came from getread.

Every event also shows up in Mailroom, so you can see what happened to any message without searching through logs.

6. Run both side by side, then switch

There’s no need to move everything at once. Start with one kind of email, maybe invoices, and watch it arrive in Mailroom. When you’re happy, move the rest. Keep SES set up until everything has moved and the last notifications have come in, then remove its DNS records whenever you like.

Want a hand with any of this? Talk to us, and a real person will help you plan the move.

Questions about moving from Amazon SES

I send through the SES SMTP interface. Can I keep doing that?
getread doesn’t have an SMTP relay, so you’ll swap your SMTP connection for one HTTPS request to the transactional send API. Your API key replaces your SMTP credentials.
Do I need to export my contacts?
Only for newsletters. Most SES senders keep contacts in their own database, and your app keeps sending transactional email to the people it already knows.
Do I still need SNS topics for bounces and complaints?
Not for getread. Add a webhook endpoint and choose email.bounced, email.complained and any other events you want. You can also see every event in Mailroom.
What about my SES suppression list?
Export it, for example with aws sesv2 list-suppressed-destinations, and send it along with your contacts, so people who bounced or complained stay suppressed.
Can I keep some email on SES?
Yes. getread’s DKIM keys live under their own names, so both can sign your email for as long as you like. Move over whatever you’re ready to, when you’re ready.

Ready when you are.

Set up getread alongside Amazon SES, and switch whenever it feels right.

[TRIAL TERMS]