[英]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.