Email Newsletter Integration (Amazon SES)
Amazon SES (Simple Email Service) is one of the cheapest options for sending high volumes of email. Cost: $0.10 per 1000 emails when sending via EC2, $0.10 per 1000 for external sending. Requires more initial setup than ready-made ESPs.
Domain Verification
Before sending, verify your domain via DNS records (DKIM, DMARC). In AWS Console: SES → Verified identities → Create identity → Domain. AWS generates CNAME records to add to DNS.
Sandbox Graduation
By default, SES works in sandbox mode: you can only send to verified emails. For production, request sandbox graduation via AWS Console (usually approved within 24–48 hours).
Sending via AWS SDK
// composer require aws/aws-sdk-php
$ses = new \Aws\Ses\SesClient([
'region' => 'eu-west-1',
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY')
]
]);
$ses->sendEmail([
'Source' => '[email protected]',
'Destination' => ['ToAddresses' => [$to]],
'Message' => [
'Subject' => ['Data' => "Order #{$orderId} Confirmed", 'Charset' => 'UTF-8'],
'Body' => [
'Html' => ['Data' => $htmlBody, 'Charset' => 'UTF-8'],
'Text' => ['Data' => $textBody, 'Charset' => 'UTF-8']
]
],
'ConfigurationSetName' => 'production-tracking' // for event tracking
]);
Laravel SES Driver
MAIL_MAILER=ses
AWS_DEFAULT_REGION=eu-west-1
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
// config/services.php
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'options' => [
'ConfigurationSetName' => 'production-tracking',
'Tags' => [['Name' => 'Environment', 'Value' => 'production']]
],
],
Configuration Sets and SNS Notifications
Configuration Sets allow receiving delivery events via Amazon SNS (Simple Notification Service) → Lambda or HTTP endpoint:
-
send,delivery,bounce,complaint,open,click - Bounce and Complaint are critical: immediately unsubscribe complainants
SES Suppression List
AWS automatically blocks resending to addresses with hard bounce or complaints. Before sending, check address via API to avoid wasting quota.
Integration timeline: 1 business day (+ 24–48 hours for domain verification and sandbox graduation).







