love_php/app/Jobs/SendMail.php

105 lines
3.1 KiB
PHP
Raw Normal View History

2026-04-02 09:20:51 +08:00
<?php
namespace App\Jobs;
use App\Http\Response\ResponseJson;
use App\Mail\AppointmentMember;
use App\Models\EmailMessage;
use App\Models\ErrorLog;
use App\Models\Message;
use App\Utils\Str;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Mail\ErrorMessage;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use App\Models\ErrorMailUser;
class SendMail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
use ResponseJson;
protected $message, $type, $toUser, $trace;
public $tries = 1;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($message, $toUser='', $type='', $trace=null)
{
$this->message = $message;
$this->type = $type;
$this->toUser = $toUser;
$this->trace = $trace;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try {
//验证码
if ($this->type == 'security_code') {
$this->sendSecurityCode();
}elseif ($this->type == 'message') {//密码
$this->sendMail();
} else {
$this->sendErrorMessage();
}
} catch (\Exception $e) {
$this->getError($e);
}
}
public function sendErrorMessage()
{
$error_log = ErrorLog::create(['message'=>$this->message, 'status'=>0, 'trace'=> $this->trace]);
$email_arr = ErrorMailUser::where('is_ban', 0)->get();
foreach ($email_arr as $email) {
if (!$email->official_openid) continue;
$data['touser'] = $email->official_openid;
$data['template_id'] = config('wechat.tpls.error_notice');
$data['url'] = config('app.url').'/error/message/'.$error_log->id;
$data['data'] = [
'first' => '服务器系统报错通知',
'keyword1' => '接口错误',
'keyword2' => '福恋',
'keyword3' => date('Y-m-d H:i:s'),
'remark' => $this->message,
];
SendTemplateMsg::dispatch($data)->onQueue('error_email');
}
}
public function sendSecurityCode()
{
$code = Str::random(6, 1);
$content = '绑定预约成员验证码:'.$code.',有效期十分钟,请妥善保管';
$data = [
'toUser'=>$this->toUser,
'text'=>$content,
];
Mail::send(new AppointmentMember($data));
EmailMessage::create(['email'=>$this->toUser, 'message'=>$content, 'code'=>$code, 'confirmed'=>0, 'ip'=>'']);
}
public function sendMail()
{
$data = [
'toUser'=>$this->toUser,
'text'=>$this->message,
];
Mail::send(new AppointmentMember($data));
EmailMessage::create(['email'=>$this->toUser, 'message'=>$this->message, 'code'=>'', 'confirmed'=>1, 'ip'=>'']);
}
}