Отправка массовых писем в Laravel - PullRequest
0 голосов
/ 12 апреля 2019

Как я могу добиться отправки массовых писем в laravel

Ниже приведен мой текущий код для достижения этой цели, но я получаю Http error 504, потому что есть пользователь 10K.

public function sendNewsletter(){

    $applicants = User::applicant()
                    ->whereMailSubscription(true)
                    ->get();

    $newsletter = NewsLetter::query()->where('id',$this->id)->first();
    $subject = $newsletter->subject;
    $message = $newsletter->message;

    foreach($applicants as $applicant){
        Mail::to($applicant)->queue(new NewsLetters($applicant,$subject,$message));
    }
}

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Вы можете использовать задание для постановки ваших писем в очередь. Таким образом, вам не придется ждать, пока все ваши письма будут поставлены в очередь.

В этом случае вы можете сгенерировать класс задания, используя, например, php artisan make:job SendNewsletter, а затем вставить свой код из функции выше в функцию handle в новом классе задания. Тогда в вашей функции sendNewsletter вы можете просто поставить в очередь новый экземпляр класса задания, например, SendNewsletter::dispatch().

Я бы также предложил "chunking" ваши результаты из таблицы users, так как вы получите столько результатов.

0 голосов
/ 12 апреля 2019

Вы можете использовать внешний сервис транзакционной электронной почты, такой как Sendgrid, который уже встроен в Laravel из коробки.

...