Why AWS SES?
Amazon Simple Email Service (SES) is the infrastructure behind most email API companies, including SMTPfast. It is the cheapest reliable email sending service available.
But setting it up yourself requires navigating AWS console, verifying domains, requesting production access, and handling bounces. Here is the complete guide.
Step 1: Create an AWS Account
If you do not have one, sign up at aws.amazon.com. New accounts get 62,000 free emails per month for the first 12 months (when sent from EC2).
Step 2: Choose Your Region
SES is available in specific AWS regions. Pick the one closest to your users:
- us-east-1 (Virginia) - Most common, lowest latency for US
- eu-west-1 (Ireland) - Best for European users
- ap-southeast-2 (Sydney) - Asia-Pacific
Go to the SES console in your chosen region.
Step 3: Verify Your Domain
In the SES console:
- Go to Identities > Create Identity
- Select Domain
- Enter your domain (e.g.,
yourapp.com) - Enable DKIM signing
- Click Create Identity
SES will give you 3 CNAME records to add to your DNS. Add them at your domain registrar and wait for verification (usually 5-30 minutes).
Step 4: Request Production Access
New SES accounts are in sandbox mode: you can only send to verified email addresses, limited to 200 emails per day.
To get production access:
- Go to Account Dashboard > Request Production Access
- Select Transactional as your mail type
- Describe your use case honestly
- Set your expected sending volume
- Explain how you handle bounces and complaints
AWS usually approves within 24 hours. Be specific about your use case - vague requests get rejected.
Step 5: Set Up Bounce Handling
This is the step most people skip, and it is the most important.
Create an SNS topic for bounces:
- Go to SNS > Create Topic (Standard type)
- Name it
ses-bounces - Create a subscription pointing to your webhook endpoint
- In SES, go to your domain identity > Notifications
- Set bounce, complaint, and delivery notifications to your SNS topic
Without bounce handling, your sending reputation will degrade over time.
Step 6: Send Your First Email
Using the AWS SDK:
import { SESClient, SendEmailCommand } from '@aws-sdk/client-ses';
const ses = new SESClient({ region: 'us-east-1' });
await ses.send(new SendEmailCommand({
Source: '[email protected]',
Destination: { ToAddresses: ['[email protected]'] },
Message: {
Subject: { Data: 'Hello from SES!' },
Body: { Html: { Data: '<h1>It works!</h1>' } },
},
}));
Or Just Use SMTPfast
Setting up SES yourself is educational but time-consuming. SMTPfast wraps SES with a simpler API, handles domain verification, bounce management, and analytics for you - so you can focus on your product instead of email infrastructure.
curl -X POST https://smtpfa.st/api/v1/emails \
-H "Authorization: Bearer sf_your_key" \
-d '{"from":"[email protected]","to":"[email protected]","subject":"Hello!","html":"<h1>Works!</h1>"}'
One line instead of thirty.
Ready to get started?
Start sending transactional email today. Free to start, no credit card required.
Get Started for FreeRelated Posts
One approval instead of five DNS records: Domain Connect on SMTPfast
If your domain is on Cloudflare, SMTPfast can publish its sending records, and separately the inbound MX, through Domain Connect. You review each set on Cloudflare's screen, approve, and the records are written for you. Here is how it works, what gets written, and what to do when your DNS lives elsewhere.
Logs API and webhook deliveries: answer 'did it send?' without opening the dashboard
Two additions for the debugging side of email: the event log behind the Logs page is now an API, and every webhook has a delivery log with attempts, responses, automatic retries and a retry button.