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
rualist.
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 theattributesyou 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 ashtml. - If you build raw MIME messages today, send the HTML and text parts as
htmlandtextinstead.
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.
Keep exploring
Questions about moving from Amazon SES
I send through the SES SMTP interface. Can I keep doing that?
Do I need to export my contacts?
Do I still need SNS topics for bounces and complaints?
email.bounced, email.complained and any other events you want. You can also see every event in Mailroom.What about my SES suppression list?
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?
Ready when you are.
Set up getread alongside Amazon SES, and switch whenever it feels right.
[TRIAL TERMS]