如何在 laravel 中配置多封电子邮件 [关闭]
Posted
技术标签:
【中文标题】如何在 laravel 中配置多封电子邮件 [关闭]【英文标题】:How to Configure multiple emails in laravel [closed] 【发布时间】:2021-10-27 22:51:46 【问题描述】:如何在我的 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));
【问题讨论】:
请勿关闭问题,因为它已正确解释... 【参考方案1】:如果this 没有帮助,那么我认为您应该在每个配置中使用.env
,例如:
MAIL_SALES_USERNAME
, MAIL_SALES_PASSWORD
MAIL_SUPPORT_USERNAME
, MAIL_SUPPORT_PASSWORD
然后在配置中你有this,所以你可以像这样在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));
阅读documentation这部分关于mailer
的内容。
【讨论】:
【参考方案2】:如果您想在 .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 实际上是用于存储字符串数据。 this 对你来说也可能很有趣。
更新:
如果你想根据你的应用逻辑从不同的电子邮件地址发送电子邮件,你可以这样做。 假设您有用户的“角色”表,并且每个用户都有一些特定的“别名”字段。由于我不知道您的应用程序的整个逻辑,您可以根据需要进行更改,但是解决问题的简单方法可以使用关联数组方法:
在 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 中保留一些字符串数据并从那里动态地提取。
【讨论】:
问题是我如何使用多个电子邮件配置。我想使用多封电子邮件发送 smtp 设置以在不同场景中使用。谢谢 用户希望根据逻辑从不同的邮件发送电子邮件,而不是来自多个发件人或地址。 @matiaslauriti 如果您愿意,可以投反对票,但最初的问题有很大不同并且被多次编辑,现在我看到了问题中的新细节。无论如何,我添加了一些更新的东西。这只是解决您的问题的一种方法,您可以更改任何您想要的内容。对于更多动态的应用程序,您将拥有更困难的数据库结构,您可以改进逻辑。以上是关于如何在 laravel 中配置多封电子邮件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 在不使用 foreach 循环的情况下发送单独的多封邮件