symfony/amazon-mailer
Symfony Mailer transport for Amazon SES. Configure SES via DSNs for SMTP, HTTPS, or API with region, optional session token, and port-based TLS behavior (implicit TLS or STARTTLS with optional require_tls override).
Mail facade and underlying SwiftMailer compatibility allow for integration via adapter patterns or direct Symfony Mailer usage. This introduces a moderate architectural risk if Laravel’s ecosystem (e.g., laravel-notification-channels) assumes native SwiftMailer or other transports.require_tls option adds granular control over encryption.// app/Providers/AppServiceProvider.php
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Transport\AmazonMailerTransport;
public function register()
{
$this->app->singleton(MailerInterface::class, function ($app) {
$transport = new AmazonMailerTransport(
'ses+api://' . env('AWS_ACCESS_KEY_ID') . ':' . env('AWS_SECRET_KEY') . '@default?region=' . env('AWS_REGION')
);
return new Mailer($transport);
});
}
eu-west-1) support GDPR/CCPA data residency requirements.Mail facade may not recognize Symfony Mailer’s transports, requiring custom facades or middleware.Mail::fake()) may need adaptation for Symfony Mailer’s behavior.amazonses.<region>.dkim.amazonses.com) can trigger email deliverability issues.ses+api) avoids SMTP overhead but requires additional AWS SDK dependencies.MAILER_DSN values in environment variables or logs.region in DSN may route emails to non-compliant SES endpoints.require_tls (e.g., require_tls=0) could expose emails to interception.laravel-notification-channels, swiftmailer) flexible enough to adopt Symfony Mailer, or are there hard dependencies on native Laravel features?ses+api transport for simplicity)?Sent, Bounce, Complaint)?AWS_ACCESS_KEY_ID, AWS_SECRET_KEY) be secured (e.g., IAM roles vs. environment variables)?SESSION_TOKEN (for temporary credentials) be used, or is IAM role-based access preferred?Symfony\Component\Mailer\MailerInterface into Laravel’s service container (as shown above). This avoids tight coupling with Laravel’s Mail facade but requires adapting existing email logic.AmazonMailer::send()) to bridge Symfony Mailer’s API with Laravel’s Mail facade methods (e.g., queue(), to()).LaravelAmazonMailerTransport that extends Symfony’s AmazonMailerTransport to handle Laravel-specific features (e.g., queueing).// app/Listeners/HandleSesNotification.php
use Aws\Ses\Exception\SesException;
public function handle(SesNotification $notification)
{
if ($notification->getNotificationType() === 'Bounce') {
// Trigger retry or alert user
}
}
region in DSN to meet compliance (e.g., eu-west-1 for GDPR).Phase 1: Pilot (1–2 Weeks)
symfony/amazon-mailer and symfony/mailer to composer.json.MAILER_DSN in .env (start with ses+api for simplicity):
MAILER_DSN=ses+api://${AWS_ACCESS_KEY_ID}:${AWS_SECRET_KEY}@default?region=${AWS_REGION}
Mail::send() with Symfony Mailer calls in the pilot service.Phase 2: Full Migration (2–3 Weeks)
config/mail.php to use Symfony Mailer’s transports.Phase 3: Optimization (Ongoing)
DeliveryAttempts, Bounce, Complaint).How can I help you explore Laravel packages today?