Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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中完成命令后发送电子邮件_Php_Laravel_Laravel Queue - Fatal编程技术网

Php 在Laravel中完成命令后发送电子邮件

Php 在Laravel中完成命令后发送电子邮件,php,laravel,laravel-queue,Php,Laravel,Laravel Queue,我有一个写在laravel上的命令,我想执行它。这将至少需要4个小时,所以我想在任务结束后从计算机上收到一封电子邮件。我正在使用队列,所以我想附加整个操作,但我不知道这是否可行 这是当前的任务: public function handle() { $directory = 'pv'; $files = Storage::allFiles($directory); foreach($files as $file) {

我有一个写在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 在
句柄的末尾发送邮件。这是最简单的选择:

public function handle()
{

    // job logic...

    Mail::to($me)->queue(new TasksFinished($msg));
}
选择2 用于链接其他作业成功后要发送的电子邮件作业:

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));
        }
    });
}

您可以使用来确定处理的作业是否是正确的类。

如果我将电子邮件任务放在foreach之后,它会按我希望的方式工作吗?@ffuents我不知道
Excel::queueImport
如何工作,所以我无法可靠地回答。但是,如果在
句柄
的末尾到达了您的邮件语句(意味着没有抛出异常),那么在大多数情况下,可以安全地假设作业成功