Portal Community
Best For High-volume email delivery (100k+/day), AWS infrastructure, cost-effective scaling.

SES Configuration Parameters

ParameterTypeRequiredExample
providerstringses
regionstringus-east-1
fromEmailstringnoreply@yourdomain.com
fromNamestringYour Company

Prerequisites

Supported Regions

RegionEndpoint
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 Key

2. 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:

Request production access via AWS Console.

Troubleshooting

"MessageRejected: Email address not verified"

"InvalidParameterValue: Missing required key"

Next Steps