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).
AmazonMailerService).SwiftMailer compatibility (since Symfony Mailer uses SwiftMailer under the hood).ses+api transport is particularly useful for low-latency, high-throughput scenarios.Mail facade or custom transports. Example:
// config/mail.php
'amazon' => [
'transport' => env('MAIL_MAILER_AMAZON', 'ses+api://'),
'dsn' => env('AWS_SES_DSN', 'ses+api://ACCESS_KEY:SECRET_KEY@default?region=us-east-1'),
],
require_tls settings) may cause connection failures.swiftmailer/swiftmailer or laravel/framework versions?ses+api (low latency) or ses+smtp (legacy compatibility)? What are the trade-offs for our use case?// app/Services/AmazonMailerService.php
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\Transport\AmazonMailerTransport;
class AmazonMailerService {
public function __construct(private string $dsn) {}
public function getMailer(): Mailer {
$transport = new AmazonMailerTransport($this->dsn);
return new Mailer($transport);
}
}
TransportManager to support ses+ DSNs by registering a custom transport factory.Mail facade but avoids Symfony dependencies.composer require symfony/amazon-mailer with version constraints.MAILER_DSN in .env (e.g., ses+api://AKIA...@default?region=us-east-1).config/mail.php with the Amazon transport.AmazonMailerTransportException).Mail::send() facade will work seamlessly if using the wrapper service approach.Mail::send([], [], function ($message) {
$message->to('user@example.com')
->subject('Test')
->setBody('Hello, SES!');
});
ShouldQueue mails will work if the mailer instance is injected into the queue worker.Mailable classes to use the Amazon mailer via dependency injection.swiftmailer/swiftmailer (e.g., spatie/laravel-activitylog) may need testing for compatibility with Symfony Mailer.symfony/amazon-mailer and symfony/mailer to composer.json with version constraints."require": {
"symfony/amazon-mailer": "^8.0",
"symfony/mailer": "^6.4"
}
AWS_SES_DSN to .env (use ses+api for API transport or ses+smtp for SMTP).config/mail.php to use the Amazon transport:
'default' => env('MAIL_MAILER', 'amazon'),
'amazon' => [
'transport' => env('MAIL_MAILER_AMAZON', 'ses+api://'),
'dsn' => env('AWS_SES_DSN'),
],
AmazonMailerService in AppServiceProvider:
public function register() {
$this->app->singleton(AmazonMailerService::class, function ($app) {
return new AmazonMailerService(env('AWS_SES_DSN'));
});
}
Symfony\Component\Mailer\Transport\MockTransport) in unit tests.How can I help you explore Laravel packages today?