繁体   English   中英

email 之间的延迟使用 laravel 中的队列

[英]Delay between email using queue in laravel

情况是我上传的.csv,例如包含50封电子邮件。 我如何在两封电子邮件之间延迟发送,因为免费的邮件陷阱 package 只允许每 10 秒发送 2 封电子邮件的速率限制。 所以我需要在 10 秒内延迟。 这是我尝试过的,但 email 仍然批量发送。

    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 将作业从每次迭代的时间延迟 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);
}

你的问题的一个很好的例子是here

您的问题是您同时为每个作业添加了 10 秒的延迟。 所以当 10 秒过去时,它们都同时运行。

要解决此问题,您需要保存基本延迟并将其添加到 go 通过循环。

这是您的案例的示例:

        $delay = json_encode(now());

        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
            ];

            $delay = Carbon::parse($delay->date)->addSeconds(10);

            $emailJob = (new SendEmail($details))->delay($delay);
            dispatch($emailJob);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM