php - Laravel 5 - 发送群组电子邮件

标签 php laravel laravel-5

我在 Laravel 5.1 应用程序中使用 Mailgun 处理电子邮件。有时我需要一次向大量用户发送电子邮件,例如内部组电子邮件和警报通知。到目前为止,我已经创建了一组收件人电子邮件地址,将电子邮件发送到网站管理员类型的地址,并将最终收件人包含在密件抄送中:

$recipients = [];

    foreach (User::emailRecipients()->get() as $user)
    {
        $recipients[] = $user->email;
    }

    $data['message'] = "Hello World";
    $data['recipients'] = $recipients;

    Mail::send('emails.group-email', $data, function($message) use ($data) {
        $message->to('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="aedddbdedec1dcdaeecacbc3c180cdc1c3" rel="noreferrer noopener nofollow">[email protected]</a>')
            ->bcc($data['recipients'])
            ->subject('Test message');
    });

虽然这有效,但并不理想。首先,我无法在电子邮件中引用每个收件人特有的任何内容(例如自定义取消订阅链接)。我无法在电子邮件提供商上使用某种邮件列表,因为收件人永远不会相同,这完全取决于几个因素。

下一个逻辑步骤是迭代每个电子邮件地址并在每次迭代中使用 Mail::send。但这会导致 Mailgun 出现任何性能问题或 API 限制吗?一封电子邮件可能会发送给大约 200 个收件人。

最佳答案

我选择直接使用 Mailgun 的 API(特别是批量发送),而不是使用 Laravel 内置的 Mail - mailgun/mailgun-php

$mailgun = new Mailgun('API-KEY');
$recipientVariables = [
        "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4734282a222829220723222a286924282a" rel="noreferrer noopener nofollow">[email protected]</a>" => ['name' => 'Benny'],
        "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9ceff3f1f9f3f2f9f9f0eff9dcf8f9f1f3b2fff3f1" rel="noreferrer noopener nofollow">[email protected]</a>" => ['name' => 'James']
    ];
$mailgun->sendMessage('demo.org', [
        "from" => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1f6c6a6f6f706d6b5f7b7a727031706d78" rel="noreferrer noopener nofollow">[email protected]</a>',
        "to" => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d6a5b9bbb3b9b8b396b2b3bbb9f8b5b9bb" rel="noreferrer noopener nofollow">[email protected]</a>, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="daa9b5b7bfb5b4bfbfb6a9bf9abebfb7b5f4b9b5b7" rel="noreferrer noopener nofollow">[email protected]</a>',
        "subject" => 'Cool Email',
        "html" => $content, // HTML from Blade template
        "text" => "Plain text message",
        "recipient-variables" => json_encode($recipientVariables)
    ]);

这还允许我访问电子邮件模板中的唯一收件人变量,如下所示:

<h1>Hello, %recipient.name%</h1>

我已经通过 CSS 内联函数传递 Blade 模板,这会将其转换为纯 HTML,因此效果非常好。

关于php - Laravel 5 - 发送群组电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787399/

相关文章:

php - 使用 PHP 检测历史变化?

php - 我在哪里可以分享我对 elasticsearch php 供应商的基准测试结果

php - 具有 Web 前端和移动应用程序的 Laravel 应用程序

laravel - 如何更改 Laravel 中的响应?

php - 如何将 Bootstrap 导航栏转换为 wordpress

php - 如何创建包含上传图像的 Slack 消息?

php - 未定义索引 : user when I display notification json array in laravel

php - Laravel 中的 index()"是什么意思?

laravel-5 - 使用 Eloquent 获取具有一种或另一种角色的所有用户

Laravel 5.6 - 未捕获的运行时异常 : A facade root has not been set