Персонализированная пакетная электронная почта с Mailgun в Laravel

Я ищу отправить персонализированные Пакет электронной почты для большого количества пользователей. Под этим я подразумеваю, что я хотел бы создать шаблон электронной почты и внедрить в него информацию о каждом пользователе перед его отправкой.

Конечно, это может быть легко достигнуто с Laravel, просматривая пользовательские данные и используя Mailer (или Mail фасад) методы (такие как send, raw, queue так далее.):

foreach ($users as $user) {
$data = ['user' => $user];
$this->mailer->queue($views, $data, function($message) use($user) {
$message->to($user->email, $user->name);
});
}

Однако, учитывая объем электронных писем, которые я хотел бы отправить, это было бы слишком медленно для моих нужд. После некоторых исследований я обнаружил, что Mailgun поддерживает отправку персонализированных пакетных электронных писем с использованием их API. С их сайта:

Пакетная отправка

С помощью одного вызова API вы можете отправлять до 1000 полностью персонализированных электронных писем.

Mailgun правильно соберет сообщение MIME и отправит электронное письмо каждому из ваших пользователей в отдельности. Это делает отправку больших объемов электронной почты намного быстрее и требует меньше ресурсов.

  • Мне было интересно, поддерживает ли Laravel персонализированную пакетную отправку электронной почты таким образом? Мне не удалось найти что-либо в документации или коде, чтобы поддержать это.
  • Существуют ли какие-либо пакеты, доступные для Laravel для поддержки этого?

Конечно, я мог бы с радостью реализовать это, используя API Mailgun напрямую или используя любые доступные SDK, но просто хотел проверить, поддерживается ли он сначала Laravel.

4

Решение

Вот как я решил ту же ситуацию, так как я не смог найти готового решения.

        $subscribers = Subscriber::active()->get();
$batch = 0;
$batch_subscribers = array();
$batch_subscribers_data = array();
foreach ($subscribers as $subscriber)
{
$batch_subscribers[] = $subscriber->mail;
$batch_subscribers_data[$subscriber->mail] = array(
"id" => $subscriber->id,
"mail" => $subscriber->mail,
"name" => $subscriber->name
);
$batch++;
if($batch < 999){
continue;
}
$input['to'] = $batch_subscribers;
$input['vars'] = $batch_subscribers_data;
Mailgun::send('email/email-base', ['input' => $input],
function ($message) use ($input)
{
$message->subject($input['asunto']);
$message->to($input['to']);
$message->replyTo("reply@address.com");
$message->recipientVariables($input['vars']);
});
$batch_subscribers = array();
$batch_subscribers_data = array();
$batch = 0;
}
3

Другие решения

Других решений пока нет …