Я ищу отправить персонализированные Пакет электронной почты для большого количества пользователей. Под этим я подразумеваю, что я хотел бы создать шаблон электронной почты и внедрить в него информацию о каждом пользователе перед его отправкой.
Конечно, это может быть легко достигнуто с 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 и отправит электронное письмо каждому из ваших пользователей в отдельности. Это делает отправку больших объемов электронной почты намного быстрее и требует меньше ресурсов.
Конечно, я мог бы с радостью реализовать это, используя API Mailgun напрямую или используя любые доступные SDK, но просто хотел проверить, поддерживается ли он сначала Laravel.
Вот как я решил ту же ситуацию, так как я не смог найти готового решения.
$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("[email protected]");
$message->recipientVariables($input['vars']);
});
$batch_subscribers = array();
$batch_subscribers_data = array();
$batch = 0;
}
Других решений пока нет …