How to use Draftship with Amazon SES
SES is the cheapest transactional sender at scale, and the path from Draftship is straightforward via SendTemplatedEmail. Get out of sandbox, configure DKIM and a configuration set, and ship at $0.10 per thousand.
Amazon SES is the cheapest transactional email service at scale. $0.10 per thousand emails, no monthly minimum, integrated with the rest of AWS. The tradeoff: more setup. You'll configure verified domains, request production access (escape from sandbox), set up Configuration Sets for tracking, and write your own template management. If you've built in Draftship, the rendering side is already done.
Two paths into SES
Path one: pass full HTML to SendEmail per send. Path two: store templates with CreateTemplate and call SendTemplatedEmail with substitution data.
For most production use cases, the template path is faster: store once, reference by name, pass per-recipient data.
CreateTemplate (the template path)
bashaws ses create-template --cli-input-json '{ "Template": { "TemplateName": "welcome-email", "SubjectPart": "Welcome to {{company}}", "HtmlPart": "<html>..." } }'
The HtmlPart field holds your Draftship export. Mustache-style {{varname}} substitutions are resolved at send time.
| Draftship | Amazon SES |
|---|---|
{{ first_name }} | {{firstName}} |
{{ last_name }} | {{lastName}} |
{{ email }} | {{email}} (or pull from destination) |
| Default fallback | Substitute in your code; Mustache has no inline default |
| Loops | Yes, {{#items}}...{{/items}} |
SendTemplatedEmail
bashaws ses send-templated-email \ --source 'noreply@yourdomain.com' \ --destination 'ToAddresses=user@example.com' \ --template welcome-email \ --template-data '{"firstName":"Alex","company":"Acme"}'
The Source (from-address) must be on a verified domain or verified email. While in sandbox, the destination must also be verified.
Escaping sandbox mode
By default every SES account starts in sandbox: limited to 200 sends per day, only to verified addresses. Submit a service quota increase request from the SES console: explain your use case, expected volume, bounce-handling plan, and suppression-list management. Approval typically takes a few business days. Without it, you can't send to real customers.
Configuration Sets and event publishing
A Configuration Set is a named bundle of behavior: which IP pool to use, which SNS topic to publish events to, which custom tracking domain to use. Create one for each business stream:
- transactional: dedicated IP pool, events to your transactional SNS topic, no link tracking.
- marketing: separate IP pool, events to marketing analytics topic, link tracking enabled.
Pass ConfigurationSetName in the SendTemplatedEmail call to bind the send to the right config.
Image hosting
External. Most SES users pair with S3 + CloudFront for images, since they're already in the AWS ecosystem. Hardcode absolute CloudFront URLs in your Draftship Image blocks.
Test send checklist
- While still in sandbox, send to a verified address and confirm the rendered output.
- Use the size checker on the output.
- Subscribe to bounce and complaint SNS topics; configure suppression-list rules.
- Verify DKIM, SPF, and DMARC for your sending domain.
When to use SES vs SendGrid or Postmark
SES wins on cost at high volume. It loses on UX, on built-in deliverability tooling, and on out-of-the-box dashboards. Pick SES if your team already lives in AWS and can absorb the operational overhead. Pick a managed sender if you want fewer dials to turn.
For DMARC enforcement and BIMI eligibility, see SPF, DKIM, and DMARC explained and BIMI logo in Gmail.