From 0c3bcb6008d22b1e26e4c7b354cafca34ba1b01c Mon Sep 17 00:00:00 2001 From: Tajim Date: Tue, 1 Sep 2026 17:19:48 +0600 Subject: [PATCH] feat(mail): add roundrobin support with 3 smtp accounts --- .env.example | 16 ++++++++++++++++ config/mail.php | 41 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 6b661041..0136ecd1 100644 --- a/.env.example +++ b/.env.example @@ -68,6 +68,22 @@ MAIL_PASSWORD=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" +# Round-Robin 3 Account Setup (e.g. Gmail SMTP) +# MAIL_MAILER=roundrobin +# MAIL_ROUNDROBIN_MAILERS="smtp_1,smtp_2,smtp_3" +# MAIL_1_HOST=smtp.gmail.com +# MAIL_1_PORT=587 +# MAIL_1_USERNAME=account1@gmail.com +# MAIL_1_PASSWORD=app_password_1 +# MAIL_2_HOST=smtp.gmail.com +# MAIL_2_PORT=587 +# MAIL_2_USERNAME=account2@gmail.com +# MAIL_2_PASSWORD=app_password_2 +# MAIL_3_HOST=smtp.gmail.com +# MAIL_3_PORT=587 +# MAIL_3_USERNAME=account3@gmail.com +# MAIL_3_PASSWORD=app_password_3 + AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=auto diff --git a/config/mail.php b/config/mail.php index e32e88da..a09b2ddc 100644 --- a/config/mail.php +++ b/config/mail.php @@ -49,6 +49,42 @@ 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), ], + 'smtp_1' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_1_SCHEME'), + 'url' => env('MAIL_1_URL'), + 'host' => env('MAIL_1_HOST', env('MAIL_HOST', 'smtp.gmail.com')), + 'port' => (int) env('MAIL_1_PORT', env('MAIL_PORT', 587)), + 'username' => env('MAIL_1_USERNAME', env('MAIL_USERNAME')), + 'password' => env('MAIL_1_PASSWORD', env('MAIL_PASSWORD')), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'smtp_2' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_2_SCHEME'), + 'url' => env('MAIL_2_URL'), + 'host' => env('MAIL_2_HOST', env('MAIL_HOST', 'smtp.gmail.com')), + 'port' => (int) env('MAIL_2_PORT', env('MAIL_PORT', 587)), + 'username' => env('MAIL_2_USERNAME', env('MAIL_USERNAME')), + 'password' => env('MAIL_2_PASSWORD', env('MAIL_PASSWORD')), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'smtp_3' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_3_SCHEME'), + 'url' => env('MAIL_3_URL'), + 'host' => env('MAIL_3_HOST', env('MAIL_HOST', 'smtp.gmail.com')), + 'port' => (int) env('MAIL_3_PORT', env('MAIL_PORT', 587)), + 'username' => env('MAIL_3_USERNAME', env('MAIL_USERNAME')), + 'password' => env('MAIL_3_PASSWORD', env('MAIL_PASSWORD')), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + 'ses' => [ 'transport' => 'ses', ], @@ -90,10 +126,7 @@ 'roundrobin' => [ 'transport' => 'roundrobin', - 'mailers' => [ - 'ses', - 'postmark', - ], + 'mailers' => array_values(array_filter(explode(',', (string) env('MAIL_ROUNDROBIN_MAILERS', 'smtp_1,smtp_2,smtp_3')))), 'retry_after' => 60, ],