Laravel 5.6如何安排电子邮件队列

时间:2018-05-06 09:02:30

标签: php laravel scheduled-tasks task-queue laravel-5.6

我正在尝试安排一封电子邮件,以提醒明天有必要完成任务的用户。我做了一个自定义命令email:reminder。这是我在自定义命令中的代码:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Todo;
use Illuminate\Support\Facades\Mail;

class SendReminderEmail extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'email:reminder';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Remind users of items due to complete next day';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        /*
         * Send mail dynamically
         */

        /*
         * hardcoded email
         */
        Mail::queue('emails.reminder', [], function ($mail) {
            $mail->to('example@email.com')
                ->from('todoreminder@gmail.com', 'To-do Reminder')
                ->subject('Due tomorrow on your To-do list!');
        }
        );


        $this->info('Reminder email sent successfully!');
    }
}

我现在硬编码了电子邮件来测试它,但是当我运行php artisan email:reminder时,我得到了一个例外

[InvalidArgumentException]     
  Only mailables may be queued.

然后我检查了Laravel的文档,但任务调度和电子邮件队列是2个单独的主题。

  • 如何在Laravel中实现具有任务调度的发送电子邮件队列 请问5.6?
  • 另外,我如何将数据(即数据库中的待办事项)传递到我的电子邮件中 请查看?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

使用控制台内核schedule queued jobs很容易。 Laravel提供了几种使cron集成无关紧要的包装方法。这是一个基本的例子:

$schedule->job(new SendTodoReminders())->dailyAt('9:00');

答案 1 :(得分:1)

您应该创建一个完全按照您的描述执行的命令,但不进行调度。您可以使用crontab进行调度或其他任务调度程序。

您是否关注过Laravel关于邮寄的文档? https://laravel.com/docs/5.6/mail

到达Sending Mail section后,您不应该创建控制器而是创建命令。

当该命令有效时,将其添加到任务调度程序(例如crontab)以便每天运行。

答案 2 :(得分:1)

 Mail::queue('emails.reminder', [], function ($mail) {
            $mail->to('example@email.com')
                ->from('todoreminder@gmail.com', 'To-do Reminder')
                ->subject('Due tomorrow on your To-do list!');
        }
        );
自Laravel 5.3以来,

已被弃用。只有Mailables可以排队,它应该实现ShouldQueue接口。

要运行作业,您必须配置queue driver并运行php artisan queue:work