Отправка электронной почты с использованием очереди laravel - PullRequest
0 голосов
/ 13 ноября 2018

Мы пытаемся отправить массовую электронную почту (100 КБ) с помощью фреймворка PHP Laravel. Как правильно отправить массовое электронное письмо с очередью Laravel?

Дело 1.

//controller
public function runQueue(){    
    dispatch(new ShootEmailJob());
}

//job 
public function handle(){
        $emails = EmailList::get(['email']);

        foreach($emails as $email){
            Mail::to($email)->send();
        }
 }

Дело 2.

//controller
public function runQueue(){

    $emailList = EmailList::get(['email']);

    foreach($emailList as $emailAddress){
        dispatch(new ShootEmailJob($emailAddress->email));
    }
}

//job    
 public function handle(){
    Mail::to($emailAddress)->send(new ShootMail($emailAddress));
 }

Какой из них является правильным подходом к случаю 1 или случаю 2?

1 Ответ

0 голосов
/ 13 ноября 2018

Первый подход сначала извлекает все электронные письма, а затем отправляет их по одному в одном «экземпляре» задания, которое запускается как фоновый процесс, если вы ставите его в очередь.

Второй подход будет запускать n «экземпляров» заданий, по одному на каждое письмо в фоновом процессе.

Таким образом, с точки зрения производительности вариант 1 является лучшим подходом. Вы также можете обернуть его в блок try - catch в случае возникновения исключений, чтобы задание не переставало работать при сбое одного из электронных писем, например ::

try {

     $emails = EmailList::get(['email']);

    foreach($emails as $email){
        Mail::to($email)->send();
    }

} catch (\Exception $e) {
   // Log error
   // Flag email for retry
   continue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...