// +---------------------------------------------------------------------- namespace App\Services; use App\Models\ConfigModel; use Illuminate\Support\Facades\Mail; /** * 邮件管理-服务类 * @author laravel开发员 * @since 2020/11/11 * Class ConfigService * @package App\Services */ class EmailService extends BaseService { /** * 配置参数 * @var array */ protected $config = []; /** * 初始化配置 * @return bool */ public function __construct() { $config = ConfigService::make()->getConfigByGroup(3); $mail = config('mail'); $mailKey = md5(json_encode($mail)); $mail['default'] = isset($config['mail_mailer']['value']) && $config['mail_mailer']['value'] ? $config['mail_mailer']['value'] : $mail['default']; $mail['markdown']['paths'] = [resource_path('views/vendor/mail')]; $smtp = isset($mail['mailers']['smtp']) ? $mail['mailers']['smtp'] : []; $smtp['host'] = isset($config['mail_host']['value']) && $config['mail_host']['value'] ? $config['mail_host']['value'] : $smtp['host']; $smtp['port'] = isset($config['mail_port']['value']) && $config['mail_port']['value'] ? $config['mail_port']['value'] : $smtp['port']; $smtp['username'] = isset($config['mail_username']['value']) && $config['mail_username']['value'] ? $config['mail_username']['value'] : $smtp['host']; $smtp['password'] = isset($config['mail_password']['value']) && $config['mail_password']['value'] ? $config['mail_password']['value'] : $smtp['password']; $smtp['timeout'] = isset($config['mail_timeout']['value']) && $config['mail_timeout']['value'] ? $config['mail_timeout']['value'] : $smtp['timeout']; if ($mail['default'] != 'smtp') { return false; } $mail['mailers']['smtp'] = $smtp; $mail['from']['address'] = $smtp['username']; $mail['from']['name'] = 'UTC'; $this->config = array_merge($config, $smtp); if ($mailKey != md5(json_encode($mail))) { //file_put_contents(base_path() . '/config/mail.php', 'error = '1014'; // return false; } $title = isset($this->config['mail_title_' . $scene]['value']) && $this->config['mail_title_' . $scene]['value'] ? $this->config['mail_title_' . $scene]['value'] : "UTC网站注册邮箱验证码"; $template = isset($this->config['mail_template_' . $scene]['value']) && $this->config['mail_template_' . $scene]['value'] ? $this->config['mail_template_' . $scene]['value'] : "您的验证码是:{code},5分钟有效期!!!"; // 生成验证码 $code = rand(100000, 999999); $template = str_replace('{code}', $code, $template); // 上锁 RedisService::set($cacheKey.'_lock', ['email'=> $email, 'code'=> $code, 'date'=> date('Y-m-d H:i:s')], rand(5, 10)); if (Mail::send('emails.index', ['title' => $title,'template'=> $template], function ($message) use ($email, $template) { $to = $email; $message->to($to)->subject($template); })) { RedisService::set($cacheKey, ['email'=> $email, 'code'=> $code, 'date'=> date('Y-m-d H:i:s')], 300); return true; } } catch (\Exception $exception){ $this->error = $exception->getMessage(); return false; } $this->error = '1005'; return false; } /** * 验证邮件验证码 * @param $email * @param string $scene 场景:默认reg-注册 * @return bool */ public function check($email, $scene = 'reg') { return true; } }