Задержка между электронной почтой с помощью очереди в laravel

Задержка между электронной почтой с помощью очереди в laravel

20.11.2019 08:33:53 Просмотров 54 Источник

Ситуация такова, что я загружаю .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);
    }
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel#comment104175930_58960239
Какой драйвер вы используете для заданий очереди?
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel#comment104176090_58960239
Я не знаю, можно ли использовать debugmail вместо mailtrap :) я не уверен, что debugmail имеет тот же предел.
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel#comment104176129_58960239
Попробуйте создать исходный экземпляр углерода вне цикла, а затем просто добавить 10 секунд к этому каждый раз.
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel#comment104176312_58960239
@EnriqueChavez я использую QUEUE_DRIVER=база данных
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel#comment104176438_58960239
@sochas спасибо за sugeestion
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel#comment104176486_58960239
@Rwd я попробую его

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

Является ответом!
Rwd

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);
}
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel/58960648#comment104176630_58960648
я получил ошибку "неизвестный геттер "дата"".Я пытаюсь решить это в первую очередь
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel/58960648#comment104176649_58960648
@HafizJamil какую версию Laravel ты используешь?
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel/58960648#comment104176682_58960648
Фреймворк Laravel 6.0.4
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel/58960648#comment104176765_58960648
@HafizJamil я обновил свой ответ. Дайте мне знать, если у вас все еще есть проблемы с этим.
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel/58960648#comment104176913_58960648
большое спасибо. Я попробовал второе решение и его работу. Это экономит мне время, потому что я пытался 3 дня, чтобы решить эту проблему. К вашему сведению, я все еще новичок в этой структуре. спасибо снова
https://stackoverflow.com/questions/58960239/delay-between-email-using-queue-in-laravel/58960648#comment104176999_58960648
@HafizJamil рад, что смог помочь! :)
Закрыть X