Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何适当延迟laravel的每100封邮件_Php_Laravel - Fatal编程技术网

Php 如何适当延迟laravel的每100封邮件

Php 如何适当延迟laravel的每100封邮件,php,laravel,Php,Laravel,如果我有1000封电子邮件,我运行的工作,通过这1000封电子邮件,并发送电子邮件 我本可以: $users = User::all(); $count = 0; $hours = 0; foreach($users as $user) { if($count % 100 === 0) { $hours++; } Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user)

如果我有1000封电子邮件,我运行的工作,通过这1000封电子邮件,并发送电子邮件

我本可以:

$users = User::all();
$count = 0;
$hours = 0;
foreach($users as $user) {
  if($count % 100 === 0) {
    $hours++;
  }
  Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user));
  $count++;
}
我还没有测试,但我想每小时发送100封电子邮件,这是正确的方法吗?

你应该使用 函数,使用队列发送邮件


$users = User::all();
$count = 0;
$hours = 0;
foreach($users as $user) {
  if($count % 100 === 0) {
    $hours++;
  }
  Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user));
  $count++;


  sleep(1);
}



你应该使用 函数,使用队列发送邮件


$users = User::all();
$count = 0;
$hours = 0;
foreach($users as $user) {
  if($count % 100 === 0) {
    $hours++;
  }
  Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user));
  $count++;


  sleep(1);
}



睡眠1;在这里没有帮助,您的解决方案是可以的,请记住前100个将被延迟一个小时

正如你所说,MailTrap在几秒钟内只允许发送两封电子邮件,你可以在每100封邮件中添加小时+几秒钟,这样,100批邮件中的每封邮件将在1到100之间延迟1小时+秒

或者另一个解决方案使用-sleep=3个参数在queue:work中,这将处理1个电子邮件睡眠3秒钟,以此类推

这将在Redis/数据库中创建一个队列,具体取决于您使用的是什么,并将在指定的日期时间内处理它们

$users=User::all; $count=0; $hours=0; foreach$users作为$user{ 如果$count%100==0{ $hours++; } 邮件::to$user->laternow->addHours$hours,新的MyEmail$user; $count++; } 睡眠1;在这里没有帮助,您的解决方案是可以的,请记住前100个将被延迟一个小时

正如你所说,MailTrap在几秒钟内只允许发送两封电子邮件,你可以在每100封邮件中添加小时+几秒钟,这样,100批邮件中的每封邮件将在1到100之间延迟1小时+秒

或者另一个解决方案使用-sleep=3个参数在queue:work中,这将处理1个电子邮件睡眠3秒钟,以此类推

这将在Redis/数据库中创建一个队列,具体取决于您使用的是什么,并将在指定的日期时间内处理它们

$users=User::all; $count=0; $hours=0; foreach$users作为$user{ 如果$count%100==0{ $hours++; } 邮件::to$user->laternow->addHours$hours,新的MyEmail$user; $count++; }
您需要在foreach循环中的某个地方休眠一个小时,并且需要if语句进行不同的测试;现在它只会增加$hours,这是从未检查过的;然后100%100==0等于真,然后更新1小时,然后在200个用户上执行同样的操作。也就是说它现在可以发送100封邮件,一小时100封,两小时100封?我不明白为什么它需要睡眠,而它可以循环所有内容并设置不同的发送时间?你需要在foreach循环中的某个地方睡眠一个小时,你需要if语句进行不同的测试;现在它只会增加$hours,这是从未检查过的;然后100%100==0等于真,然后更新1小时,然后在200个用户上执行同样的操作。也就是说它现在可以发送100封邮件,一小时100封,两小时100封?我不明白为什么它需要睡眠,当它可以循环通过所有和设置不同的时间发送?你能补充一个解释为什么吗?可能避免邮件服务器,因为我们使用睡眠功能我很抱歉,我显然很笨,但我不明白你通常有一个等待时间发送邮件,邮件服务器还可以防止过度请求我的英语不是超级可能我无法向你解释…你不是哑巴…你能解释一下原因吗?可能由于我们使用睡眠功能而避免使用邮件服务器很抱歉,我显然是哑巴,但我不明白你通常在发送邮件时会等待一段时间,邮件服务器也可以防止过多的请求我的英语不是很好也许我无法向你解释…你不是傻瓜…所以如果我将小时数改为-1,现在就可以了,对吗?我正在使用redis,我只是用分钟尝试了一下,但似乎mailtrap只允许在几秒钟内发送两封邮件。因此,我将在2分钟前用2条消息测试它。不确定你是否可以将0传递到now->addHours$hours,啊,现在我得到了它,它将更新我的答案。因此,如果我将hours更改为-1,它将是now,对吗?我正在使用redis,我只是用分钟尝试了一下,但似乎mailtrap只允许在几秒钟内发送两封邮件。因此,我将在2分钟前用2条消息测试它。不确定你是否可以通过0进入now->addHours$hours,啊,现在我知道了,将更新我的答案。