Как правильно задерживать каждые 100 писем в laravel - PullRequest
0 голосов
/ 24 сентября 2019

Если у меня есть 1000 электронных писем, и я запускаю работу, которая проходит через эти 1000 электронных писем и отправляет электронные письма.

Я мог бы иметь:

$users = User::all();
$count = 0;
$hours = 0;
foreach($users as $user) {
  if($count % 100 === 0) {
    $hours++;
  }
  Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user));
  $count++;
}

Я еще не проверял это, но яхотел бы отправлять 100 писем каждый час, это правильный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 24 сентября 2019

sleep(1); здесь не поможет, ваше решение в порядке, просто имейте в виду, что первые 100 будут отложены на час. Laravel Docs

Также, как вы сказали, MailTrap разрешает только 2 электронных письма за несколько секунд, вы можете добавить часы + несколько секунд к каждому 100, таким образом, каждое электронное письмо в 100Пакет будет отложен на 1 час + секунды от 1 до 100;

Или другое решение использует --sleep=3 params в queue:work, при этом будет обработан 1 спящий запрос электронной почты в течение 3 секунд и т. д.

Это создаст очередь в (Redis / Database), зависит от того, что вы используете, и обработает их в указанное время.

$users = User::all();
$count = 0;
$hours = 0;

foreach($users as $user) {

  if($count % 100 === 0) {
    $hours++;
  }

  Mail::to($user)->later(now()->addHours($hours), new MyEmail($user));
  $count++;

}
0 голосов
/ 24 сентября 2019

Вы должны использовать функцию sleep , использовать очередь для отправки почты


$users = User::all();
$count = 0;
$hours = 0;
foreach($users as $user) {
  if($count % 100 === 0) {
    $hours++;
  }
  Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user));
  $count++;


  sleep(1);
}



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...