我正在尝试安排一封电子邮件,以提醒明天有必要完成任务的用户。我做了一个自定义命令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个单独的主题。
非常感谢任何帮助!
答案 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