queue="email";//指定队列 $this->user = $user; $this->mail_template_alias = $mail_template_alias; $this->isAuthMail = $isAuthMail; $this->titleParams = $titleParams; $this->contentParams = $contentParams; $this->tag = 'none'; $this->check_route="email.check"; } /** * Execute the job. * * @param EmailTemplateRepository $emailTemplateRepository * @param EmailQueueRepository $emailQueueRepository * @param EmailBatchRepository $emailBatchRepository * @return void * @throws \Exception */ public function handle( EmailTemplateRepository $emailTemplateRepository, EmailQueueRepository $emailQueueRepository, EmailBatchRepository $emailBatchRepository ) { $template=$emailTemplateRepository->getTemplate($this->mail_template_alias, $this->titleParams, $this->contentParams); $mailQueue=$emailQueueRepository->createRecord($template, is_string($this->user)?$this->user:$this->user->email, $this->batch_id); if (!isset($template->role) || $template->role->status == 0) { $emailQueueRepository->saveRecord($mailQueue->id, 3, "邮件规则不存在或者邮件规则没有开启"); $emailBatchRepository->updateBatch($this->batch_id, false); return; } try { if ($this->isAuthMail) { $this->sendAuthEmail($template); } else { $this->sendEmail($template); } $emailQueueRepository->saveRecord($mailQueue->id, 1); $emailBatchRepository->updateBatch($this->batch_id); } catch (\Exception $e) { $emailQueueRepository->saveRecord($mailQueue->id, 3, $e->getMessage()); $emailBatchRepository->updateBatch($this->batch_id, false); //throw $e; } if (!empty($this->callback)) { $obj=app($this->callback[0][0]); call_user_func_array([$obj, $this->callback[0][1]], $this->callback[1]); } } /** * @param $callback */ public function setCallback($callback): void { $this->callback = $callback; } /** * @param mixed $batch_id */ public function setBatchId($batch_id): void { $this->batch_id = $batch_id; } /** * @param mixed $tag */ public function setTag($tag): void { $this->tag = $tag; } /** * @param string $check_route */ public function setCheckRoute(string $check_route): void { $this->check_route = $check_route; } /** * @param $template */ protected function sendEmail($template) { Mail::to($this->user)->send(new DefaultMail($template->value, $template->title, $this->user)); } protected function sendAuthEmail($template) { $code=str_random(64); $params['check_url']=route($this->check_route, ['code'=>$code,'tag'=>$this->tag]); $template->value=render_template($template->value, $params); $this->sendEmail($template); $cache['alias']=$template->alias; $cache['email']=is_string($this->user)?$this->user:$this->user->email; Cache::put($code, $cache, 24*60); } }