<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # .composer下載PHPMailer包 # 2.封裝發送郵件功能 把這個函數丟到`app/common.php`公共的函數文件中去 ~~~php //郵件發送 if (!function_exists('sendmail')) { function sendmail($address, $title, $body) { $mail = new \PHPMailer\PHPMailer\PHPMailer(true); try { $mail->SMTPDebug = 0; $mail->isSMTP(); $mail->CharSet = "UTF-8"; //utf-8; $mail->Encoding = "base64"; $mail->Host = env('mail.host'); $mail->SMTPAuth = true; $mail->Username = env('mail.username'); $mail->Password = env('mail.password'); $mail->SMTPSecure = env('mail.encryption'); $mail->Port = env('mail.port'); //Recipients $mail->setFrom(env('mail.from_address'), env('mail.from_name')); //接收人 $mail->addAddress($address); //回復的時候回復給哪個郵箱 建議和發件人一致 $mail->addReplyTo(env('mail.from_address'), 'info'); //Content $mail->isHTML(true); //防止中文亂碼 $mail->Subject = "=?UTF-8?B?" . base64_encode($title) . "?="; $mail->Body = $body; $mail->AltBody = '您的郵箱客戶端不支持顯示HTML內容'; $mail->send(); return true; } catch (Exception $e) { return $e; } } } ~~~ `.env`配置文件 最新的88郵箱配置smtp地址是smtp.88.com 端口465 ~~~ini [MAIL] HOST = smtp.88.com PORT = 465 USERNAME = xxxx PASSWORD = xxxxx ENCRYPTION = ssl FROM_ADDRESS = xxxx FROM_NAME = xxx ~~~ # 3.使用 ~~~bash sendmail('xxx@xx.xx', '系統通知', '<h1>你好啊</h1>'); ~~~ # 拓展:使用think-queue消息隊列發送郵件 ~~~php //前面的注冊邏輯省略... //緩存key(此處可以替換為redis等nosql緩存產品) //參數說明 //參數1:緩存標志register_email_code_+用戶注冊入庫時返回的主鍵id作為緩存key //參數2:uuid當作緩存值進行緩存 //參數3:緩存過期時間(這里我從我的配置文件中讀取,你可以直接設置值,單位:秒),24 * 60 * 60 cache("register_email_code_" . $user->id, $uuid, config('my.email_register.expire')); //異步發送郵箱 //把需要的數據傳遞過去 Queue::push(RegEmailActiveJob::class, [ 'user_id' => $user->id, //昵稱 'nickname' => $user->profile->nickname, //uuid 'uuid' => $uuid, //發給誰 'email' => $user->email ]); ~~~ 生成RegEmailActiveJob異步任務 ~~~php <?php namespace app\job; use think\queue\Job; class RegEmailActiveJob { public function fire(Job $job, $data) { $user_id = $data['user_id']; $nickname = $data['nickname']; $uuid = $data['uuid']; $email = $data['email']; $link = env('app.host') . '/validate/email?user_id=' . $user_id . '&code=' . $uuid; //smarty替換變量后返回html內容 $html = app('smarty')->fetch('index/email/regEmailActive.tpl', compact('nickname', 'link')); //發送郵件 sendmail($email, config('my.email_register.title'), $html); if ($job->attempts() > 3) { //通過這個方法可以檢查這個任務已經重試了幾次了 // Log::info("超過三次"); } //如果任務執行成功后 記得刪除任務,不然這個任務會重復執行,直到達到最大重試次數后失敗后,執行failed方法 $job->delete(); // 也可以重新發布這個任務 //$job->release(0); //$delay為延遲時間 } public function failed($data) { // ...任務達到最大重試次數后,失敗了 } } ~~~ uuid生成方法 ~~~perl //生成uuid if (!function_exists('uuid')) { function uuid($prefix = '') { $chars = md5(uniqid(mt_rand(), true)); $uuid = substr($chars, 0, 8); $uuid .= substr($chars, 8, 4); $uuid .= substr($chars, 12, 4); $uuid .= substr($chars, 16, 4); $uuid .= substr($chars, 20, 12); return $prefix . $uuid; } } ~~~ # 發送成功后用戶點擊連接的處理 驗證成功后你可以直接登錄,你也可以跳轉回登錄頁,讓用戶登錄 ~~~php //郵箱注冊鏈接回調 public function email(Request $request) { //接收參數 $user_id = $request->get('user_id'); $code = $request->get('code'); if ($user_id === null || $code === null) { return $this->smarty->display('index/error/error.tpl', [ 'msg' => '激活地址非法', 'code' => 500 ]); } //判斷緩存中取出來的是否和傳遞過來的是否相等 if (cache('register_email_code_' . $user_id) != $code) { return $this->smarty->display('index/error/error.tpl', [ 'msg' => '激活地址已失效', 'code' => 500 ]); } //上面那一步過不來就等于是非法了,到這一步其實就已經可以直接更新狀態了 $user = User::with(['profile'])->find($user_id); $user->status = 1; $user->save(); //讓緩存失效 cache('register_email_code_' . $user_id, null); //直接登錄 session('index_user', $user); return redirect((string)url('/'))->with('success', '登錄成功'); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看