如何在 laravel 中配置多个电子邮件

How to Configure multiple emails in laravel

如何在我的 laravel 应用程序中使用多个来自电子邮件的配置?

问题:在.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_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 实际上是用于存储字符串数据。另外 可能对您也很有趣。

更新:

如果你想根据你的应用程序逻辑从不同的电子邮件地址发送电子邮件,你可以这样做。 假设您有用户的“角色”table,并且每个用户都有一些特定的“别名”字段。由于我不知道你的应用程序的整个逻辑,你可以根据需要更改它,但是解决问题的简单方法是使用关联数组方法:

mail.php

中添加'aliases'属性
'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 中保留一些字符串数据并从那里提取 dinamycally.

如果 this 没有帮助,那么我认为您应该对每个配置进行 .env,例如:

  • MAIL_SALES_USERNAMEMAIL_SALES_PASSWORD
  • MAIL_SUPPORT_USERNAMEMAIL_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,
],

因此,在发送电子邮件之前,您只需 select/change 您希望用作发件人的人:

Mail::mailer('support')
    ->to($request->user())
    ->send(new SupportTicketGenerated($ticket));

// Or

Mail::mailer('sales')
    ->to($request->user())
    ->send(new OrderShipped($order));

阅读 documentation 关于 mailer 的这一部分。