如何在我的laravel应用程序中使用多个来自电子邮件的配置?
- 场景#1:我想使用sales@mywebsite.com所有计费相关电子邮件的电子邮件
- 场景#2:我想使用support@mywebsite.com所有通知和其他情况的电子邮件
问题:在.env文件中,我们只能配置一个电子邮件smtp详细信息。如何使用多个电子邮件帐户并将其凭据用于不同的场景。
我的.env smtp设置
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=xxxxxxxxx
MAIL_PASSWORD=xxxxxxxxxxxxx
MAIL_FROM_ADDRESS=sales@mywebsite.com
MAIL_FROM_NAME="Sales"
MAIL_ENCRYPTION=TLS
下面发送电子邮件,但从.env文件中获取配置。
Mail::to($firmAdminEmail->admin_email)->send(new AdminLeadAccept($acceptLink));
如果这没有帮助,那么我认为您应该将.env
与每个配置一起使用,如:
MAIL_SALES_USERNAME
、MAIL_SALES_PASSWORD
MAIL_SUPPORT_USERNAME
、MAIL_SUPPORT_PASSWORD
然后在配置中有这个,所以你可以添加新的"发送者";mailers
内部如下:
'sales' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_SALES_USERNAME'),
'password' => env('MAIL_SALES_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
],
'support' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_SUPPORT_USERNAME'),
'password' => env('MAIL_SUPPORT_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
],
所以,在你发送电子邮件之前,你只需选择/更改你想使用的发件人:
Mail::mailer('support')
->to($request->user())
->send(new SupportTicketGenerated($ticket));
// Or
Mail::mailer('sales')
->to($request->user())
->send(new OrderShipped($order));
阅读有关mailer
的文档的这一部分。
如果你想在.env中有硬编码的电子邮件,你可以这样保存它们:
MAIL_FROM_ADDRESS="email@gmail.com"
MAIL_FROM_ADDRESSES="email1@gmail.com,email2@gmail.com,email3@gmail.com"
在config/mail.php
中添加一些属性,如:
'from' => [
'addresses' => explode(',', env('MAIL_FROM_ADDRESSES')),
'address' => env('MAIL_FROM_ADDRESS'),
'name' => env('MAIL_FROM_NAME'),
],
刷新Laravel缓存。刚刚运行:
php artisan config:cache
在你的应用程序中的任何地方使用它们,如下所示:
config('mail.from.addresses')
就是这样。请注意.env实际上是用来存储字符串数据的。这对你来说可能也很有趣。
更新:
如果你想根据你的应用程序逻辑从不同的电子邮件地址发送电子邮件,你可以这样做。
让我们假设你有";角色";表,每个用户都有一些特定的";别名";领域由于我不知道你的应用程序的整个逻辑,你可以根据自己的意愿进行更改,但解决问题的简单方法是使用相关的数组方法:
在mail.php
:中添加"别名"属性
'from' => [
'aliases' => [
// all the roles values (starting from 0)
'admin' => 0,
'moderator' => 1,
// ...
],
'addresses' => explode(',', env('MAIL_FROM_ADDRESSES')),
'address' => env('MAIL_FROM_ADDRESS'),
'name' => env('MAIL_FROM_NAME'),
],
同样,不要忘记清除缓存并使用这样的电子邮件发送:
// for example here the app will send email dynamically depending from auth user
// assume the $user is auth user (admin, moderator or something like that)
$alias_number = config('mail.from.aliases.' . $user->role->alias);
Mail::from(config('mail.from.addresses')[$alias_number])
->to('some.email@gmail.com')
->send(new AdminLeadAccept($acceptLink));
您可以根据需要覆盖或更改。核心逻辑是,您可以在.env中保留一些字符串数据,并从中动态提取。