在Laravel中使用Mailgun进行个性化批处理电子邮件

Jon*_*hon 5 php email bulk-email laravel mailgun

我希望将个性化的批处理电子邮件发送给大量用户。我的意思是,我想设置一个模板电子邮件,然后在发送之前将每个用户的信息注入其中。

当然,这可以容易地与Laravel通过用户数据循环,并使用邮件程序(或者实现Mail门面)方法(如sendrawqueue等等):

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

但是,考虑到我想发送的电子邮件数量,这对于我的需求来说太慢了。经过一些研究,我发现Mailgun支持使用其API发送个性化批处理电子邮件。从他们的网站:

批量发送

通过一个API调用,您最多可以发送1000个完全个性化的电子邮件。

Mailgun将正确组装MIME消息,并将电子邮件分别发送给每个用户。这使得发送大量电子邮件的速度大大加快,并且减少了资源消耗。

  • 我想知道Laravel是否以这种方式支持个性化批量电子邮件发送?我没有设法在文档或代码中找到任何东西来支持这一点。
  • Laravel是否有任何可用的软件包来支持这一点?

当然,我可以直接使用Mailgun的API或使用任何可用的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;
        }
Run Code Online (Sandbox Code Playgroud)