# How to Send an Email Using Amazon SES: A Step-by-Step Guide
Key Takeaways
- Amazon SES (Simple Email Service) is AWS's managed service for sending transactional, marketing, and bulk email at scale.
- Sending starts in a "sandbox" mode limited to verified addresses — moving to production requires a support request.
- You can send via SMTP, the AWS CLI, or an SDK (boto3, Node.js, Java).
- Domain verification with DKIM signing dramatically improves deliverability and avoids spam folders.
- SES pricing is usage-based: roughly $0.10 per 1,000 emails sent from an EC2 or Lambda-hosted application.
What Is Amazon SES?
Amazon Simple Email Service (amazonses, often searched as "amazon email services") is a cloud-based email-sending platform built for developers who need reliable, scalable outbound email — password resets, order confirmations, newsletters, or notification systems — without running their own mail servers.
SES handles the hard parts of email infrastructure: IP reputation management, bounce and complaint handling, DKIM/SPF signing, and feedback loops with major mailbox providers.
Step 1: Verify Your Identity
Before you can send amazon ses email, you must verify either an email address or, for production use, an entire domain.
aws ses verify-domain-identity --domain f9infotech.com --region us-east-1
This returns a verification token you add as a TXT record in Route 53 (or your DNS provider):
aws route53 change-resource-record-sets \
--hosted-zone-id Z1234567890ABC \
--change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "_amazonses.f9infotech.com",
"Type": "TXT",
"TTL": 1800,
"ResourceRecords": [{ "Value": "\"verification-token-here\"" }]
}
}]
}'
Step 2: Enable DKIM Signing
DKIM (DomainKeys Identified Mail) proves your emails weren't tampered with in transit — a major deliverability signal.
aws ses verify-domain-dkim --domain f9infotech.com
AWS returns three CNAME tokens; add each as a DNS record, then SES automatically begins signing outgoing mail once DNS propagates.
Step 3: Move Out of the Sandbox
New SES accounts start in sandbox mode: you can only send to verified addresses, capped at 200 emails/day. To send to arbitrary recipients, request production access via the SES console (Account Dashboard → Request production access) describing your use case, bounce-handling plan, and expected volume.
Step 4: Send Email via CLI
aws ses send-email \
--from "noreply@f9infotech.com" \
--destination '{"ToAddresses":["customer@example.com"]}' \
--message '{
"Subject": {"Data": "Your order has shipped"},
"Body": {
"Text": {"Data": "Your order #4821 has shipped and will arrive in 3-5 days."}
}
}'
Step 5: Send Email via Python (boto3)
import boto3
from botocore.exceptions import ClientError
ses = boto3.client("ses", region_name="us-east-1")
try:
response = ses.send_email(
Source="noreply@f9infotech.com",
Destination={"ToAddresses": ["customer@example.com"]},
Message={
"Subject": {"Data": "Welcome to f9infotech"},
"Body": {
"Html": {
"Data": "<h1>Welcome!</h1><p>Thanks for signing up.</p>"
}
},
},
)
print("Message sent:", response["MessageId"])
except ClientError as e:
print("Send failed:", e.response["Error"]["Message"])
Sending Flow Overview
<svg viewBox="0 0 740 240" xmlns="http://www.w3.org/2000/svg" font-family="Arial, sans-serif" font-size="13" fill="currentColor">
<defs>
<marker id="arrow2" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
<polygon points="0 0, 10 3.5, 0 7" fill="currentColor"/>
</marker>
</defs>
<style>
.box { fill: none; stroke: currentColor; stroke-width: 1.6; }
.arrow { stroke: currentColor; stroke-width: 1.6; fill: none; marker-end: url(#arrow2); }
</style>
<rect class="box" x="20" y="90" width="130" height="60" rx="8"/>
<text x="85" y="125" text-anchor="middle">Your App</text>
<line class="arrow" x1="150" y1="120" x2="230" y2="120"/>
<text x="190" y="105" text-anchor="middle" font-size="11">SendEmail API</text>
<rect class="box" x="230" y="70" width="150" height="100" rx="8"/>
<text x="305" y="110" text-anchor="middle">Amazon SES</text>
<text x="305" y="130" text-anchor="middle" font-size="11">(DKIM sign +</text>
<text x="305" y="146" text-anchor="middle" font-size="11">reputation mgmt)</text>
<line class="arrow" x1="380" y1="120" x2="460" y2="120"/>
<rect class="box" x="460" y="90" width="130" height="60" rx="8"/>
<text x="525" y="125" text-anchor="middle">Recipient Inbox</text>
<line class="arrow" x1="305" y1="170" x2="305" y2="210"/>
<text x="305" y="228" text-anchor="middle" font-size="11">bounce/complaint → SNS topic</text>
</svg>
Handling Bounces and Complaints
Configure SNS notifications so your app reacts to failed deliveries:
aws ses set-identity-notification-topic \
--identity f9infotech.com \
--notification-type Bounce \
--sns-topic arn:aws:sns:us-east-1:123456789012:ses-bounces
Suppress or flag addresses that bounce hard — repeated hard bounces damage your sender reputation and can trigger SES account review.
Pricing
- $0.10 per 1,000 emails sent (from an app inside AWS)
- $0.12 per 1,000 if sent outside AWS infrastructure
- First 62,000 emails/month free when sending from an EC2 instance
FAQ
What's the difference between amazonses and a regular SMTP relay? SES is a managed, highly deliverable email API/SMTP endpoint with built-in reputation management, bounce handling, and DKIM — a self-managed SMTP relay gives you none of that out of the box.
How do I avoid landing in spam when sending amazon web services email? Verify your domain, enable DKIM, set up SPF and a DMARC record, warm up gradually, and monitor your bounce/complaint rate — SES can suspend accounts that exceed a 5% bounce or 0.1% complaint rate.
Can SES send bulk marketing campaigns? Yes, SES supports bulk sending, but for list management, templates, and unsubscribe handling you'll typically pair it with a tool built on SES (e.g., using SES as the sending backend).
Is there a sending rate limit? Yes — each account has a maximum send rate (emails/second) and a 24-hour sending quota, both of which increase automatically as your sending reputation improves.
Need Reliable Email Infrastructure on AWS?
f9infotech helps teams configure Amazon SES correctly the first time — domain verification, DKIM/DMARC, bounce handling, and production access requests included. Talk to our AWS team about setting up scalable email delivery for your application.