我创建了一个发送邮件的命令,当从控制台执行命令时,它运行良好,并发送电子邮件:
php artisan loans:notify
然后我在调度器中创建了这样的任务:
protected function schedule(Schedule $schedule)
{
$schedule->command('loans:notify')->hourlyAt(24);
}
然后执行php artisan schedule:work
,调度器执行具有output:的任务
[2021-05-15T19:24:00+02:00] Execution #1 output:
Running scheduled command: "d:laragonbinphpphp-7.4.11-win32-vc15-x64php.exe" "artisan" loans:notify > "NUL" 2>&1
但是电子邮件没有被发送。
我在一份工作中尝试过,也是一样,我在发送邮件时添加了日志记录,日志记录部分可以工作,但仍然没有发送电子邮件。
这里的邮件发送部分:
public function handle()
{
$movements = BookInstanceMovement::where('borrow_returned', NULL)->whereDate('borrow_end', '<', Carbon::now())->get();
foreach ($movements as $movement) {
try {
echo "SENDING MAILn";
echo "to " . $movement->user->email . "n";
echo "book " . $movement->book_instance->book->title . "n";
Mail::to($movement->user)->send(new LateLoanMail($movement->book_instance->book->title));
} catch (Throwable $th) {
echo $th->getMessage();
}
}
}
更新:
我发现调度程序中的命令可能在Windows中不起作用,因为它像一样执行它
"d:laragonbinphpphp-7.4.11-win32-vc15-x64php.exe" "artisan" loans:notify > "NUL" 2>&1
当试图在控制台上执行它时,它会出现错误:
Out-File: FileStream was asked to open a device that was not a file. For support for devices like 'com1:' or 'lpt1:', call CreateFile, then use the FileStream constructors that take an OS handle as an IntPtr.
但使用乔布斯,它可以在不发送电子邮件的情况下输出日志记录。
更新:
执行php artisan schedule:run
,工作和发送电子邮件,php artisan schedule:work
是队列电子邮件吗?
我参加聚会迟到了,但我也遇到了类似的问题。当某些事件发生时,我所有的邮件都使用Mailgun在Vapor上工作。然而,当创建一个发送提醒电子邮件的命令时,当vapor运行cron任务时,不会触发邮件,但它会更新数据库,说一切都很好,但如果我通过vapor UI或命令行手动执行命令,则会发送邮件。