gpt4 book ai didi

Laravel:使用队列每小时发送 1000 封电子邮件

转载 作者:行者123 更新时间:2023-12-04 15:53:10 25 4
gpt4 key购买 nike

我有一个包含 5000 条记录(5000 个用户)的用户表,在我的服务器中我每小时只能发送 1000 封电子邮件。我如何使用队列每小时发送 1000 封电子邮件?或者如何让队列在循​​环内休眠?

邮件 Controller :

class EmailController extends Controller
{
public function sendEmail(Request $request){

$event=(object)['content' => "Hello Laravel fans",'subject' => 'Test Email'];
$users=User::all();
App\Jobs\SendReminderEmail::dispatch($users,$event)
}
}

发送提醒邮件

class SendReminderEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public $event;

public $email;

public $users;

public function __construct($users,$event)
{
$this->users = $users;

$this->event = $event;
}

public function handle()
{
foreach ($this->users as $user) {

Mail::to($user->email)->queue(new Reminder($this->event));
}
}
}

最佳答案

Laravel 有一个非常适合你的情况的简洁功能,它叫做 Task Scheduling ,您可以每小时调用一次,而不是让作业休眠一小时。

为此,将作业计划添加到位于 App\Console\Kernelschedule() 方法中,如下所示:

protected function schedule(Schedule $schedule)
{
$schedule->job(new SendReminderEmail)->hourly();
}

我也建议你把工作做成独立的,这将使这个任务简单得多,我在想这样的事情:

class SendReminderEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public $event;

public $users;

public function __construct()
{
$this->users = User::all();

$this->event = (object)['content' => "Hello Laravel fans",'subject' => 'Test Email'];;
}

public function handle()
{
foreach ($this->users as $user) {
Mail::to($user->email)->queue(new Reminder($this->event));
}
}
}

现在你可以摆脱你的 Controller ,因为这个工作将每小时自动执行一次。

请记住,您需要在服务器上运行 cron 以检查是否需要执行作业。如果您想使用 php artisan schedule:run 测试它,您也可以手动运行它。

希望对你有帮助。

关于Laravel:使用队列每小时发送 1000 封电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com