我在 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/