注意事項
開啟socket:在PHP.ini中取消extension=php_sockets.dll前面的分號。
.登錄你的郵箱手動開啟STMP服務,這個服務默認是關閉的,一定要去郵箱->設置里去手動開啟,開啟時要求你設置一個獨立密碼,這個密碼就是寫在 'MAIL_PASSWORD'=>' ', // 郵箱密碼,的密碼而不是郵箱登錄密碼
userinfo中加上一個字段Resettime(郵箱提交時間,和當前時間比較,判斷鏈接是否過期)
1、? ? ? 在ThinkPHP/Extend/Library/ORG/Net/目錄下放入PHPMailer.class.php、class.pop3.php、class.smtp.php文件
2、? ? ? ? 在Index/Conf/config.php配置文件中加上以下配置項//發送郵件? 'MAIL_ADDRESS' => '18782227612@163.com', // 郵箱地址(注冊時好像會有一個地址)? 'MAIL_SMTP' => 'smtp.163.com', // 郵箱SMTP服務器? 'MAIL_LOGINNAME' => 'm18782227612_2@163.com', // 郵箱登錄帳號? 'MAIL_PASSWORD' => 'bviqbapkcyyrrtmf', // 郵箱密碼(這是我開啟STMP服務時給的授權密碼,注意看注意事項第2點)? 'MAIL_CHARSET' => 'UTF-8', // 編碼? 'MAIL_AUTH' => true, // 郵箱認證? 'MAIL_HTML' => true, // true HTML格式 false TXT格式
3、? ? ? ? 在Index/Common /common.php文件中建一個函數IsSMTP();// 設置郵件的字符編碼,若不指定,則為'UTF-8'$mail->CharSet='UTF-8';// 添加收件人地址,可以多次使用來添加多個收件人$mail->AddAddress($address);// 設置郵件正文$mail->Body=$message;// 設置郵件頭的From字段。$mail->From=C('MAIL_ADDRESS');// 設置發件人名字$mail->FromName='zyimm';// 設置郵件標題$mail->Subject=$title;// 設置SMTP服務器。$mail->Host=C('MAIL_SMTP');// 設置為“需要驗證”$mail->SMTPAuth=true;// 設置用戶名和密碼。$mail->Username=C('MAIL_LOGINNAME');$mail->Password=C('MAIL_PASSWORD');// 發送郵件。return($mail->Send());}?
4、? ? ? ? 在Index/Lib/Action/IndexAction.class.php中加入以下兩個方法? //找回密碼---發送到郵箱,用戶驗證? public function sendemail() {? ? ? import('ORG.Net.PHPMailer');? ? ? $r = M('userinfo')->where(array('Loginname' => I('username'),'Email' => I('email')))->find();? ? ? $this->user = $r;? ? ? if (!$r) {? ? ? ? ? echo 'alert("該用戶不存在或者郵箱不正確!");location.href="http://localhost/jiaxiao2/index.php/Index/findpwd"';? ? ? } else {? ? ? ? ? $user = I('username');? ? ? ? ? $email = I('email');? ? ? ? ? $content = "$user,你好:? ? ? ? ? ? ? 您收到這封電子郵件是因為您 (也可能是某人冒充您的名義) 申請了一個找回密碼的請求。? ? ? 假如這不是您本人所申請, 或者您曾持續收到這類的信件騷擾, 請您盡快聯絡管理員。? ? ? 您可以點擊如下鏈接重新設置您的密碼,如果點擊無效,請把下面的代碼拷貝到瀏覽器的地址欄中:? ? ? http://localhost/jiaxiao2/index.php/Index/findpassword?Loginname=$user? ? ? 在訪問鏈接之后, 您可以重新設置新的密碼。";? ? ? ? ? $rs = SendMail($email, '民大駕校---用戶密碼找回', $content,'manager'); //SendMail('admin@waikucms.com','郵件標題','郵件正文','歪酷CMS管理員');解釋下參數: 參數1---目標郵箱, 參數2----郵件標題,參數三--郵件正文,參數四---發件人名稱;? ? ? ? ? if ($rs) {? ? ? ? ? ? ? M('userinfo')->where(array('Loginname' => I('username'), 'Email'=> I('email')))->save(array('Resettime' => date('Y-m-d H:i:s')));? ? ? ? ? ? ? ? echo'alert("系統已將重置密碼的鏈接安全的發到了您的郵箱,請及時查收!");location.href="http://localhost/jiaxiao2/index.php/?n=1"';? ? ? ? ? } else {? ? ? ? ? ? ? ? echo'alert("郵件發送失敗!");location.href="http://localhost/jiaxiao2/index.php/Index/findpwd"';? ? ? ? ? }? ? ? }? }? ? //找回密碼? //郵箱有效期? 從數據庫取出發送郵件的提交時間,和當前時間做對比,如果當前時間超過提交時間30分,則過期? public function findpassword(){? ? ? $username = I('Loginname');? ? ? $user = M('userinfo')->where(array('Loginname' =>$username))->select();? ? ? $this->user = $user;? ? ? $u = M('userinfo')->where(array('Loginname' =>$username))->find();? ? ? $resettime = $u['Resettime']; //獲取數據庫郵箱發送時間? ? ? $time = date("Y-m-d H:i:s", strtotime("-30 min"));//當前時間減去30分后還小于等于發送郵箱時間,則時間有效,反之過期? ? ? $data = array('Password' => md5(I('password')));? ? ? $rs = M('userinfo')->where(array('Loginname' => I('Loginname')))->save($data);? ? ? if ($resettime >= $time) {? ? ? ? ? if ($rs) {? ? ? ? ? ? ? ? echo'alert("修改密碼成功!");location.href="http://localhost/jiaxiao2/index.php/?n=1"';? ? ? ? ? }? ? ? } else {? ? ? ? ? echo 'alert("該鏈接已經過期!");location.href="http://localhost/jiaxiao2/index.php/?n=1"';? ? ? }? ? ? $this->display();}
5、? ? ? ? 然后在在Index/Tpl/Index中加入以下兩個html文件Findpwd.html找回密碼
返回用戶名
郵箱
Findpassword.html文件找回密碼
返回
用戶名
新的密碼
確認新密碼
6、? ? ? ? 然后在登錄頁面加上相應的鏈接在Index/Tpl/common/top.html和indextop.html中學員和教練后面加上忘記登錄密碼?