【问题标题】:How to Configure multiple emails in laravel [closed]如何在 laravel 中配置多封电子邮件 [关闭]
【发布时间】: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));

【问题讨论】:

  • 请勿关闭问题,因为它已正确解释...

标签: php laravel email smtp


【解决方案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 对你来说也可能很有趣。

    更新:

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

    ma​​il.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 如果您愿意,可以投反对票,但最初的问题有很大不同并且被多次编辑,现在我看到了问题中的新细节。无论如何,我添加了一些更新的东西。这只是解决您的问题的一种方法,您可以更改任何您想要的内容。对于更多动态的应用程序,您将拥有更困难的数据库结构,您可以改进逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    相关资源
    最近更新 更多