5

パーソナライズされたバッチ電子メールを多数のユーザーに送信したいと考えています。これは、テンプレートの電子メールを設定し、送信する前に各ユーザーの情報を挿入したいという意味です。

もちろん、これはユーザーデータをループし、メーラー (またはMailファサード) メソッド ( send、など)rawを使用することで、Laravel で簡単に実現できます。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 を使用してパーソナライズされたバッチ電子メールの送信をサポートしていることがわかりました。彼らのウェブサイトから:

一括送信

1 回の API 呼び出しで、完全にパーソナライズされたメールを最大 1000 件送信できます。

Mailgun は MIME メッセージを適切に組み立て、各ユーザーに個別にメールを送信します。これにより、大量の電子メールの送信が大幅に高速化され、リソースの消費が大幅に削減されます。

  • Laravel がこの方法でパーソナライズされたバッチ電子メール送信をサポートするかどうか疑問に思っていましたか? ドキュメントやコードでこれをサポートするものを見つけることができませんでした。
  • これをサポートするために Laravel で利用できる既存のパッケージはありますか?

もちろん、Mailgun の API を直接使用するか、利用可能な SDK を使用してこれを実装することもできますが、最初に Laravel でサポートされているかどうかを確認したかっただけです。

4

1 に答える 1

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;
        }
于 2016-08-03T13:59:27.903 に答える