溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php實(shí)現(xiàn)郵箱驗(yàn)證的方法

發(fā)布時(shí)間:2020-10-09 17:21:01 來(lái)源:億速云 閱讀:548 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)php實(shí)現(xiàn)郵箱驗(yàn)證的方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

php實(shí)現(xiàn)郵箱驗(yàn)證的方法:首先下載phpMailer;然后解壓到項(xiàng)目根目錄下;接著需要一臺(tái)郵件服務(wù)器;最后在“config.php”中配置郵箱相關(guān)的信息并創(chuàng)建用于發(fā)送郵件的公用方法即可。

一、Introduction

需求是用戶在注冊(cè)時(shí)填寫email,注冊(cè)后,需要到郵箱驗(yàn)證后才能登陸。

二、實(shí)現(xiàn)

驗(yàn)證流程,注冊(cè)成功后,為用戶生成一個(gè)驗(yàn)證碼;將驗(yàn)證碼以連接方式發(fā)到用戶郵箱;用戶點(diǎn)擊連接將驗(yàn)證碼發(fā)回網(wǎng)站;網(wǎng)站驗(yàn)證這個(gè)驗(yàn)證碼是否是為這個(gè)用戶生成的驗(yàn)證碼;帳號(hào)需要在24小時(shí)內(nèi)驗(yàn)證,否則帳號(hào)失效。

1. 準(zhǔn)備工作

需要添加phpMailer類來(lái)發(fā)郵件。下載phpMailer,然后解壓到項(xiàng)目根目錄下。

發(fā)郵件使用smtp協(xié)議,端口是25;收郵件,使用pop3協(xié)議,端口號(hào)是110。還需要一臺(tái)郵件服務(wù)器??梢宰约捍罱?,也可以使用第三方的。使用第三方的郵件服務(wù)器需要在第三方注冊(cè)一個(gè)帳號(hào)。登陸開(kāi)啟smtp協(xié)議。

在config.php中配置郵箱相關(guān)的信息。

   'EMAIL' => array(

       'host' => 'smtp.163.com',

       'user' => 'youxiangzhanghao',

       'password' => 'password', //此處的密碼為user郵箱在開(kāi)啟smtp時(shí)設(shè)置的授權(quán)密碼。     

),

2.  創(chuàng)建用于發(fā)送郵件的公用方法

/**

 * 發(fā)送郵件的方法

 */

functionsendMail($to, $title, $content)

{

         require_once('./PHPMailer-5.2.14/class.smtp.php');

         require_once('./PHPMailer-5.2.14/class.phpmailer.php');

         $mail = new PHPMailer();

         //設(shè)置為發(fā)送郵件

         $mail->IsSMTP();

         //是否允許發(fā)送html代碼為郵件內(nèi)容

         $mail->IsHTML(true);

         $mail->CharSet = 'utf-8';

         //是否需要身份驗(yàn)證

         $mail->SMTPAuth = true;

         //郵件服務(wù)器的帳號(hào)信息

         $mailConfig = C('EMAIL');

         $mail->From =$mailConfig['user'].'@163.com';

         $mail->FromName =$mailConfig['user'];

         $mail->Host = $mailConfig['host'];

         $mail->Username = $mailConfig['user'];

         $mail->Password =$mailConfig['password'];

         //發(fā)郵件的端口號(hào)

         $mail->Port = 25;

         //收件人

         $mail->AddAddress($to);

         //郵件標(biāo)題

         $mail->Subject = $title;

         //郵件內(nèi)容

         $mail->Body = $content;

         return($mail->send());

}

在控制器的首頁(yè)方法中測(cè)試

//測(cè)試發(fā)送郵件

var_dump(sendMail('haha@163.com','phptestemail', '<a href="http://www.phptest.com">hahahah</a>'));

3. 修改會(huì)員表,添加email字段和驗(yàn)證碼字段

email  varchar(150)  not  null comment  '郵箱',

email_chkcode  char(32)  not  null default  ''  comment  '郵箱驗(yàn)證碼',

email_chkcode_time  int  unsigned  not  null comment  '郵箱驗(yàn)證碼生成時(shí)間',

key  email_chkcode(email_chkcode)

4.修改注冊(cè),必須填email

修改注冊(cè)表單,添加email字段;修改member模型,允許插入email字段,并增加email字段為email的驗(yàn)證規(guī)則。

5.注冊(cè)之前生成email驗(yàn)證碼

在_before_insert()方法中

                   //生成email驗(yàn)證碼

                   $data['email_chkcode']= md5(uniqid());

                   $data['email_chkcode_time']= time();

6.        注冊(cè)之后將驗(yàn)證碼發(fā)給用戶郵箱

         /**

          * 注冊(cè)后的鉤子函數(shù)

          */

         protected function _after_insert($data,$option)

         {

                   $content = "歡迎注冊(cè),請(qǐng)點(diǎn)擊以下完成驗(yàn)證:<p><a href='http://www.php2.com/eshop/index.php/Home/Member/email_chk/code/{$data['email_chkcode']}'>請(qǐng)點(diǎn)擊</a></p>";

                   sendMail($data['email'],'php2網(wǎng)站郵箱驗(yàn)證', $content);

         }

7.        在member控制器添加方法完成驗(yàn)證

    /**

     * 完成郵箱驗(yàn)證方法

     */

    public function email_chk()

    {

        //接收驗(yàn)證碼

        $code = I('get.code');

        //查詢這個(gè)驗(yàn)證碼是否有效

        $member = D('Admin/Member');

        $info = $member->field('id,email_chkcode_time')->where(array(

            'email_chkcode' => $code,

        ))->find();

        if($info)

        {

            if((time() -$info['email_chkcode_time']) > 86400)

            {

                //帳號(hào)過(guò)期,刪除這個(gè)帳號(hào)

               $member->delete($info['id']);

                $this->error('驗(yàn)證碼已過(guò)期,帳號(hào)已經(jīng)刪除,請(qǐng)重新注冊(cè)', U('regist'));

                exit;

            }

            else

            {

                //驗(yàn)證通過(guò),將驗(yàn)證碼清空

                $member->where(array(

                    'id' => $info['id'],

               ))->setFielf('email_chkcode', '');

                $this->success('驗(yàn)證通過(guò),請(qǐng)登陸', U('login'));

                exit;

            }

        }

        else

        {

            $this->error('參數(shù)錯(cuò)誤', U('/'));

            exit;

        }

    }

8.        修改會(huì)員模型中的登陸方法

         //判斷這個(gè)帳號(hào)是否通過(guò)驗(yàn)證碼驗(yàn)證

         if(!empty($user['email_chkcode']))

         {

                   $this->error= '必須驗(yàn)證后才可以登陸';

                   returnfalse;

         }

9.        修改注冊(cè)代碼

如果一個(gè)帳號(hào)已經(jīng)存在,但是過(guò)期沒(méi)有驗(yàn)證,可以刪除這個(gè)帳號(hào)。

添加注冊(cè)時(shí)的表單驗(yàn)證,為username和email添加關(guān)于唯一性和注冊(cè)驗(yàn)證碼的驗(yàn)證。

array('email','chk_un_email', 'email已經(jīng)存在!', 1,'callback', 3),

array('username','chk_un_user', '用戶名已經(jīng)存在!', 1,'callback', 3),

         //驗(yàn)證已經(jīng)存在的郵箱是否通過(guò)驗(yàn)證

         public function chk_un_email()

         {

                   $email = I('post.email');

                   $username =I('post.username');

                   $hasEmail =$this->field('id,email_chkcode,email_chkcode_time')->where(array(

                            'email' =>$email,

                   ))->find();

                   if($hasEmail)

                   {

                            if(empty($hasEmail['email_chkcode']))

                            {

                                     returnfalse;

                            }

                            else

                            {

                                     if(time() -$hasEmail['email_chkcode_time'] > 86400)

                                     {

                                               $this->delete($hasEmail['id']);

                                               returntrue;

                                     }

                                     else

                                     {

                                               returnfalse;

                                     }

                            }

                   }

                   else

                   {

                            return true;

                   }

         }



         //驗(yàn)證已經(jīng)存在的用戶名是否通過(guò)驗(yàn)證

         public function chk_un_user()

         {

                   $username =I('post.username');

                   $hasUsername =$this->field('id,email_chkcode,email_chkcode_time')->where(array(

                            'username' =>$username,

                   ))->find();

                   if($hasUsername)

                   {

                            if(empty($hasUsername['email_chkcode']))

                            {

                                     returnfalse;

                            }

                            else

                            {

                                     if(time() -$hasUsername['email_chkcode_time'] > 86400)

                                     {

                                               $this->delete($hasUsername['id']);

                                               returntrue;

                                     }

                                     else

                                     {

                                               returnfalse;

                                     }

                            }

                   }

                   else

                   {

                            return true;

                   }

         }

感謝各位的閱讀!關(guān)于php實(shí)現(xiàn)郵箱驗(yàn)證的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI