Задержка между электронной почтой с помощью очереди в laravel
Ситуация такова, что я загружаю .csv, который содержит 50 писем, например. Как я могу задержать отправку 2 писем, потому что бесплатный пакет mailtrap просто разрешил ограничение скорости отправки за 10 секунд всего 2 письма. Поэтому мне нужно задержаться в течение 10 секунд. Это то, что я пробовал, но письмо по-прежнему отправить в пакетном режиме.
for ($i = 0; $i < $count; $i++) {
$participant = new Participant();
$participant->p_name = $participantArray[0][$i]['name'];
$participant->p_email = $participantArray[0][$i]['email'];
$participant->p_address = $participantArray[0][$i]['address'];
$participant->p_postcode = $participantArray[0][$i]['postcode'];
$participant->p_city = $participantArray[0][$i]['city'];
$participant->p_state = $participantArray[0][$i]['state'];
$participant->p_contact = $participantArray[0][$i]['contactno'];
$confirmation_code = str_random(30);
$participant->confirmation_code = $confirmation_code;
$participant->save();
$participant->campaign()->attach($request->campaign_id);
$details = [
'email' => $participantArray[0][$i]['email'],
'confirmation_code' => $confirmation_code
];
$emailJob = (new SendEmail($details))->delay(Carbon::now()->addSeconds(10));
dispatch($emailJob);
}






Ответы - Задержка между электронной почтой с помощью очереди в laravel / Delay between email using queue in laravel

20.11.2019 08:58:40
Самым простым способом, вероятно, было бы создать экземпляр carbon вне цикла, а затем продолжать добавлять к нему. В настоящее время вы говорите Laravel, чтобы отложить задание на 10 секунд от времени каждой итерации, но между каждой итерацией будет (более чем вероятно) меньше 1 мс, поэтому задания все равно будут обрабатываться примерно в одно и то же время.
$now = now();
for ($i = 0; $i < $count; $i++) {
//The rest of your code
dispatch(new SendEmail($details))->delay($now->addSeconds(10));
}
Вышеизложенное будет означать, что он будет продолжать добавлять 10 секунд к предыдущему времени. Если вы хотите, чтобы первое задание начиналось сразу (а затем задерживало каждое последующее на 10 секунд) , вы можете добавить экземпляр carbon после установки задержки на задании:
$now = now();
for ($i = 0; $i < $count; $i++) {
//The rest of your code
dispatch(new SendEmail($details))->delay($now);
$now->addSeconds(10);
}





