如何在Laravel中配置多个发件邮箱适配不同业务场景
Laravel多发件邮箱配置实现方案
1. 补充.env环境变量
在现有.env的MAIL配置后面新增两套SMTP参数:
# 销售账单邮箱配置 MAIL_SALES_DRIVER=smtp MAIL_SALES_HOST=smtp.mailtrap.io MAIL_SALES_PORT=2525 MAIL_SALES_USERNAME=xxxxxxxxx MAIL_SALES_PASSWORD=xxxxxxxxxxxxx MAIL_SALES_FROM_ADDRESS=sales@mywebsite.com MAIL_SALES_FROM_NAME="Sales" MAIL_SALES_ENCRYPTION=TLS # 客服通知邮箱配置 MAIL_SUPPORT_DRIVER=smtp MAIL_SUPPORT_HOST=smtp.mailtrap.io MAIL_SUPPORT_PORT=2525 MAIL_SUPPORT_USERNAME=yyyyyyyyy MAIL_SUPPORT_PASSWORD=yyyyyyyyyyyyy MAIL_SUPPORT_FROM_ADDRESS=support@mywebsite.com MAIL_SUPPORT_FROM_NAME="Support" MAIL_SUPPORT_ENCRYPTION=TLS
2. 修改config/mail.php注册多邮箱配置
找到mailers数组,新增两个自定义邮箱驱动配置项:
'mailers' => [ // 原有默认的smtp配置保留 'smtp' => [ 'driver' => env('MAIL_DRIVER', 'smtp'), 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => null, ], // 新增销售账单邮箱配置 'sales' => [ 'driver' => env('MAIL_SALES_DRIVER', 'smtp'), 'host' => env('MAIL_SALES_HOST'), 'port' => env('MAIL_SALES_PORT'), 'encryption' => env('MAIL_SALES_ENCRYPTION', 'tls'), 'username' => env('MAIL_SALES_USERNAME'), 'password' => env('MAIL_SALES_PASSWORD'), 'from' => [ 'address' => env('MAIL_SALES_FROM_ADDRESS'), 'name' => env('MAIL_SALES_FROM_NAME'), ], 'timeout' => null, ], // 新增客服通知邮箱配置 'support' => [ 'driver' => env('MAIL_SUPPORT_DRIVER', 'smtp'), 'host' => env('MAIL_SUPPORT_HOST'), 'port' => env('MAIL_SUPPORT_PORT'), 'encryption' => env('MAIL_SUPPORT_ENCRYPTION', 'tls'), 'username' => env('MAIL_SUPPORT_USERNAME'), 'password' => env('MAIL_SUPPORT_PASSWORD'), 'from' => [ 'address' => env('MAIL_SUPPORT_FROM_ADDRESS'), 'name' => env('MAIL_SUPPORT_FROM_NAME'), ], 'timeout' => null, ], // 其他原有配置保持不变 ],
3. 业务场景按需调用对应邮箱配置
发送邮件时先用mailer()方法指定要使用的配置标识即可:
- 账单相关业务用sales配置:
\Mail::mailer('sales')->to($firmAdminEmail->admin_email)->send(new AdminLeadAccept($acceptLink));
- 通知类及其他业务用support配置:
\Mail::mailer('support')->to($user->email)->send(new OrderNotify($orderInfo));
注意事项
修改配置后如果开启了配置缓存,需要执行php artisan config:cache刷新配置生效。
内容的提问来源于stack exchange,提问作者Bamme
相关产品推荐
相关产品推荐

