AWS SES Configuration
Send high-volume emails via Amazon Simple Email Service. $0.10 per 1000 emails.
Best For High-volume email delivery (100k+/day), AWS infrastructure, cost-effective scaling.
SES Configuration Parameters
| Parameter | Type | Required | Example |
|---|---|---|---|
provider | string | ✅ | ses |
region | string | ✅ | us-east-1 |
fromEmail | string | ✅ | noreply@yourdomain.com |
fromName | string | ❌ | Your Company |
Prerequisites
- AWS Account with SES access
- IAM user with SES permissions
- Access Key ID and Secret Access Key
- Verified email domain or sender address in SES
Supported Regions
| Region | Endpoint |
|---|---|
| US East (N. Virginia) | us-east-1 |
| US West (Oregon) | us-west-2 |
| EU (Ireland) | eu-west-1 |
| Asia Pacific (Tokyo) | ap-northeast-1 |
Setup Steps
1. Create AWS IAM User
1. Go to AWS IAM console
2. Create new user with programmatic access
3. Attach policy: AmazonSESFullAccess
4. Copy Access Key ID and Secret Access Key2. Verify Sender Email in SES
AWS Console → SES → Email Addresses → Verify a New Email Address
- Enter: noreply@yourdomain.com
- Click verification link in email
- Status changes to "verified"3. Create Credential in Database
Choose a credential name (e.g., "email-primary", "email-ses", etc.). Configure which name each tenant uses via TenantSettings with Key='EmailCredentialName'.
INSERT INTO AIExt_Credentials (
Name, DisplayMetadata, EncryptedData, TenantID, CredentialTypeID
) VALUES (
'email-primary', -- Or any name you configure in TenantSettings
'{
"provider": "ses",
"region": "us-east-1",
"fromEmail": "noreply@yourdomain.com",
"fromName": "Your Company"
}',
0x..., -- Encrypted: AccessKeyId + SecretAccessKey
1, 2
);4. Test Configuration
// Resolve credential name from TenantSettings (defaults to "email-primary")
var credentialName = await _tenantSettingsService.GetAsync<string>(
1, "EmailCredentialName", "email-primary", CancellationToken.None);
var result = await _emailService.SendAsync(
tenantID: 1,
to: "test@example.com",
subject: "SES Test",
html: "<p>If you see this, SES is working!</p>",
credentialName: credentialName,
ct: CancellationToken.None);Sandbox Mode Limitations
New SES accounts start in Sandbox mode:
- Can only send to verified email addresses
- Max 1 email per second
- Max 200 emails per 24 hours
Request production access via AWS Console.
Troubleshooting
"MessageRejected: Email address not verified"
- Verify sender email in SES console
- If in sandbox, verify recipient email too
- Wait a few minutes after verification
"InvalidParameterValue: Missing required key"
- Verify AccessKeyId and SecretAccessKey are correct
- Check encrypted credential in database
