Массовая отправка электронных писем в Laravel

#laravel #mailing

#laravel #рассылка

Вопрос:

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

Здесь ниже приведен мой текущий код для достижения этой цели, но я получаю Http-ошибку 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));
    }
}
  

Комментарии:

1. Я думаю, я бы рекомендовал использовать что-то вроде Mailchimp для отправки информационных бюллетеней.

2. Нет, это был просто пример, но у меня есть другие действия по массовой рассылке в моем приложении @Ruub

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

Ответ №1:

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

Ответ №2:

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

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

Я бы также предложил «разделить» ваши результаты на части из users таблицы, поскольку вы будете получать так много результатов.