您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關php實現郵箱驗證的方法的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
php實現郵箱驗證的方法:首先下載phpMailer;然后解壓到項目根目錄下;接著需要一臺郵件服務器;最后在“config.php”中配置郵箱相關的信息并創建用于發送郵件的公用方法即可。
一、Introduction
需求是用戶在注冊時填寫email,注冊后,需要到郵箱驗證后才能登陸。
二、實現
驗證流程,注冊成功后,為用戶生成一個驗證碼;將驗證碼以連接方式發到用戶郵箱;用戶點擊連接將驗證碼發回網站;網站驗證這個驗證碼是否是為這個用戶生成的驗證碼;帳號需要在24小時內驗證,否則帳號失效。
1. 準備工作
需要添加phpMailer類來發郵件。下載phpMailer,然后解壓到項目根目錄下。
發郵件使用smtp協議,端口是25;收郵件,使用pop3協議,端口號是110。還需要一臺郵件服務器。可以自己搭建,也可以使用第三方的。使用第三方的郵件服務器需要在第三方注冊一個帳號。登陸開啟smtp協議。
在config.php中配置郵箱相關的信息。
'EMAIL' => array( 'host' => 'smtp.163.com', 'user' => 'youxiangzhanghao', 'password' => 'password', //此處的密碼為user郵箱在開啟smtp時設置的授權密碼。 ),
2. 創建用于發送郵件的公用方法
/** * 發送郵件的方法 */ 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(); //設置為發送郵件 $mail->IsSMTP(); //是否允許發送html代碼為郵件內容 $mail->IsHTML(true); $mail->CharSet = 'utf-8'; //是否需要身份驗證 $mail->SMTPAuth = true; //郵件服務器的帳號信息 $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']; //發郵件的端口號 $mail->Port = 25; //收件人 $mail->AddAddress($to); //郵件標題 $mail->Subject = $title; //郵件內容 $mail->Body = $content; return($mail->send()); }
在控制器的首頁方法中測試
//測試發送郵件 var_dump(sendMail('haha@163.com','phptestemail', '<a href="http://www.phptest.com">hahahah</a>'));
3. 修改會員表,添加email字段和驗證碼字段
email varchar(150) not null comment '郵箱', email_chkcode char(32) not null default '' comment '郵箱驗證碼', email_chkcode_time int unsigned not null comment '郵箱驗證碼生成時間', key email_chkcode(email_chkcode)
4.修改注冊,必須填email
修改注冊表單,添加email字段;修改member模型,允許插入email字段,并增加email字段為email的驗證規則。
5.注冊之前生成email驗證碼
在_before_insert()方法中
//生成email驗證碼 $data['email_chkcode']= md5(uniqid()); $data['email_chkcode_time']= time();
6. 注冊之后將驗證碼發給用戶郵箱
/** * 注冊后的鉤子函數 */ protected function _after_insert($data,$option) { $content = "歡迎注冊,請點擊以下完成驗證:<p><a href='http://www.php2.com/eshop/index.php/Home/Member/email_chk/code/{$data['email_chkcode']}'>請點擊</a></p>"; sendMail($data['email'],'php2網站郵箱驗證', $content); }
7. 在member控制器添加方法完成驗證
/** * 完成郵箱驗證方法 */ public function email_chk() { //接收驗證碼 $code = I('get.code'); //查詢這個驗證碼是否有效 $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) { //帳號過期,刪除這個帳號 $member->delete($info['id']); $this->error('驗證碼已過期,帳號已經刪除,請重新注冊', U('regist')); exit; } else { //驗證通過,將驗證碼清空 $member->where(array( 'id' => $info['id'], ))->setFielf('email_chkcode', ''); $this->success('驗證通過,請登陸', U('login')); exit; } } else { $this->error('參數錯誤', U('/')); exit; } }
8. 修改會員模型中的登陸方法
//判斷這個帳號是否通過驗證碼驗證 if(!empty($user['email_chkcode'])) { $this->error= '必須驗證后才可以登陸'; returnfalse; }
9. 修改注冊代碼
如果一個帳號已經存在,但是過期沒有驗證,可以刪除這個帳號。
添加注冊時的表單驗證,為username和email添加關于唯一性和注冊驗證碼的驗證。
array('email','chk_un_email', 'email已經存在!', 1,'callback', 3),
array('username','chk_un_user', '用戶名已經存在!', 1,'callback', 3),
//驗證已經存在的郵箱是否通過驗證 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; } } //驗證已經存在的用戶名是否通過驗證 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; } }
感謝各位的閱讀!關于php實現郵箱驗證的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。