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++;
}