命令完成后发送电子邮件 Laravel
Send an email after command has finished in Laravel
我在 laravel 上写了一个命令,我想执行它。这至少需要 4 个小时,所以我想在任务结束时从电脑上收到一封电子邮件。我正在使用队列,所以我想附加整个操作,但我不知道这是否可能。
这是当前任务:
public function handle()
{
$directory = 'pv';
$files = Storage::allFiles($directory);
foreach($files as $file)
{
$fname = basename($file);
\Log::info('Procesando ',[$fname]);
$arr = explode(" ", $fname);
$day = substr($arr[2], 0, 10);
$date = Carbon::parse($day);
// this process goes to a queue in chunks
Excel::queueImport(new POSImport($date), $file);
}
}
如何在全部结束后附加发送电子邮件的新作业?我不确定我是否必须执行新命令或新工作。我已经测试了电子邮件作业并且可以正常工作。
App\Jobs\SendMailFinished.php
public function handle()
{
//Sends message
$me = 'me@example.com';
$msg = 'Process finished';
Mail::to($me)->queue(new TasksFinished($msg));
}
您可以通过多种不同的方式执行此操作。
选项 1
在您的 handle
方法结束时发送邮件。这是最简单的选项:
public function handle()
{
// job logic...
Mail::to($me)->queue(new TasksFinished($msg));
}
选项 2
使用withChain链接其他作业成功后要发送的电子邮件作业:
YourTask::withChain([
new SendMailFinished
])->dispatch();
选项 3
将 JobProcessed
的事件侦听器添加到 EventServiceProvider.php:
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
Queue::after(function (JobProcessed $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
if ($was_my_job_class) {
Mail::to($me)->queue(new TasksFinished($msg));
}
});
}
您可以使用 确定处理的作业是否正确 class。
我在 laravel 上写了一个命令,我想执行它。这至少需要 4 个小时,所以我想在任务结束时从电脑上收到一封电子邮件。我正在使用队列,所以我想附加整个操作,但我不知道这是否可能。
这是当前任务:
public function handle()
{
$directory = 'pv';
$files = Storage::allFiles($directory);
foreach($files as $file)
{
$fname = basename($file);
\Log::info('Procesando ',[$fname]);
$arr = explode(" ", $fname);
$day = substr($arr[2], 0, 10);
$date = Carbon::parse($day);
// this process goes to a queue in chunks
Excel::queueImport(new POSImport($date), $file);
}
}
如何在全部结束后附加发送电子邮件的新作业?我不确定我是否必须执行新命令或新工作。我已经测试了电子邮件作业并且可以正常工作。
App\Jobs\SendMailFinished.php
public function handle()
{
//Sends message
$me = 'me@example.com';
$msg = 'Process finished';
Mail::to($me)->queue(new TasksFinished($msg));
}
您可以通过多种不同的方式执行此操作。
选项 1
在您的 handle
方法结束时发送邮件。这是最简单的选项:
public function handle()
{
// job logic...
Mail::to($me)->queue(new TasksFinished($msg));
}
选项 2
使用withChain链接其他作业成功后要发送的电子邮件作业:
YourTask::withChain([
new SendMailFinished
])->dispatch();
选项 3
将 JobProcessed
的事件侦听器添加到 EventServiceProvider.php:
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
Queue::after(function (JobProcessed $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
if ($was_my_job_class) {
Mail::to($me)->queue(new TasksFinished($msg));
}
});
}
您可以使用