这是我第一次尝试实现任务调度,我试图在某个时间发送自动电子邮件:
在实现我的cron之前,我首先在一个普通的类中手动测试了我的电子邮件发送代码,看看是否没有错误,如果没有错误,电子邮件就成功发送了。
在那之后,我开始实施任务调度
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);
}
}
}
}
内核.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设置了twiceDaily
/usr/local/bin/php /.......myProjectPath/artisan schedule:run >> /dev/null 2>&1
我在我的DemoCron.php中打印了一个日志,看看它是否真的有效
结果1:当我选择schedule once per minute时,它会打印我的日志,尊重我的Democron.php中的所有条件,但它 * 不发送电子邮件 *。
**结果2:**当我选择某个时间(每天两次或一天一次)时,我的LOG不会打印任何内容,并且它 * 不会发送电子邮件 *。
我做错了什么?请帮帮我!
更新
我用来手动发送电子邮件的SendMail类工作得很好,
但是预定的邮件
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]);
}
}
4条答案
按热度按时间5f0d552i1#
尝试了几次之后,我找到了一个解决方案。
1-新建控制器
我创建了一个名为MailController的新控制器,而不是使用通过Laravel Scheduling生成的Kernel.php和Democron.php类
2-添加新路由
添加了一个不带身份验证的新路由
3-在Cpanel上增加了一个cronjob
cvxl0en22#
首先检查所有内容:
implements ShouldQueue
;所有的东西都已验证,但仍然无法发送电子邮件:
终于
* * * * *
,并且在我的laravel项目的内核中,我验证是否必须使用laravel命令执行某些命令,如->twiceDaily(12, 15)
。尝试所有的事情,如果错误仍然存在,请更新此线程!
n3h0vuf23#
对我来说,这是我的Apache配置文件(php.ini)
我最初是按照ConfigServer建议的“disable_functions”配置来做的,这就是导致我出现这个问题的原因
看起来像是在disabled_functions中添加proc_open导致了这个问题
打开你的php.ini并找到“disable_functions”,然后从列表中删除/移除“proc_open”
我所要做的就是保存文件,我的日程表立即工作,没有重新启动任何东西-但你可能需要尝试重新启动你的
希望这能帮助任何遇到这个的人
vjrehmav4#
我有同样的问题,我尝试了一个新的smtp电子邮件服务器
而不是
我不知道这是关于加密还是主机功能,但它对我很有效