您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(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ò),可以把它分享出去讓更多的人看到吧!
免責(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)容。