[英]Laravel Schedule not sending email
這是我第一次嘗試實現任務調度,我試圖在某個時間發送自動電子郵件:
在實現我的cron之前,我首先測試了我的email在正常的class中手動發送代碼,看看是否沒有錯誤,並且沒有錯誤,email發送成功。
之后,我開始實施任務調度
Democron.php
protected $signature = 'demo:cron';
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$tasks = Task::all();
$date = Carbon::now()->toDateTimeString();
foreach ($tasks as $task) {
if($task->completed_at != null){
$validad = $task->completed_at;
$receiver_id = User::findOrFail($task->user_id);
if($date > $validad){
$details = [
'task_id' =>$task->id,
'receiver_id' => $receiver_id
];
$subject = 'TeamWork - Você tem tarefas em atraso!';
$view = 'emails.project.delaydtask';
Mail::to($receiver_id->email)->send(new SendMail($details, $subject, $view));
Log::info('Email enviado com sucesso para '.$receiver_id->email);
}
}
}
}
Kernel.php
protected $commands = [
DemoCron::class,
];
protected function schedule(Schedule $schedule)
{
$schedule->command('demo:cron')
->twiceDaily(12, 15)
->timezone('Africa/Maputo');
}
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
我在 CPANEL 上添加到 CRON JOBS並在 12 和 15 處設置了兩次
/usr/local/bin/php /.......myProjectPath/artisan schedule:run >> /dev/null 2>&1
我在 DemoCron.php 中打印了一個 LOG,看看它是否真的有效
結果 1:當我 select 計划每分鍾一次時,它會打印我的 LOG,尊重我的Democron.php中的所有條件,但它不會發送 Z0C83F57C786A0B4A39EFAB2373
結果 2:當我 select 某個時間(每天兩次或每天一次)時,我的 LOG 沒有打印任何內容,也沒有發送 email 。
我究竟做錯了什么? 請幫幫我!
更新
我用來手動發送電子郵件的 SendMail class 運行良好,
但預定的電子郵件沒有發送
class SendMail extends Mailable
{
use Queueable, SerializesModels;
public $details, $subject, $view;
public function __construct($details, $subject, $view)
{
$this->details = $details;
$this->subject = $subject;
$this->view = $view;
}
public function build()
{
return $this->subject($this->subject)
->view($this->view, ['details' => $this->details]);
}
}
首先讓我們檢查所有事情:
implements ShouldQueue
;好吧,所有事情都經過驗證,但仍未發送 email:
最后
* * * * *
and in the kernel of my laravel project I verify if some command must be executed with the laravel commands like ->twiceDaily(12, 15)
.嘗試所有方法,如果錯誤仍然存在,請更新此線程!
經過多次嘗試,我找到了解決方法。
1-新建controller
I created a new controller called MailController instead of using the Kernel.php and Democron.php classes that I generated through Laravel Scheduling
class MailController extends Controller
{
public function delayedtask(){
try {
$tasks = Task::all();
$date = Carbon::now()->toDateTimeString();
foreach ($tasks as $task) {
if($task->completed_at != null){
$validad = $task->completed_at;
$receiver_id = User::findOrFail($task->user_id);
if($date > $validad){
$details = [
'task_id' =>$task->id,
'receiver_id' => $receiver_id
];
$subject = 'TeamWork - Você tem tarefas em atraso!';
$view = 'emails.project.delaydtask';
Mail::to($receiver_id->email)->send(new SendMailQueue($details, $subject, $view));
Log::info('Email enviado com sucesso para '.$receiver_id->email);
}
}
}
return "Done!";
} catch (Exception $e) {
return "Something went wrong!";
}
}
}
2-添加一條新路線
添加了沒有身份驗證的新路線
Route::get('/delayedtask',[MailController::class, 'delayedtask']);
3-在 Cpanel 上添加了一個 cronjob
curl -s "https://myWebsiteURL/delayedtask">/dev/null 2>&1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.