CI框架使用PHPmailer发送邮件找回密码

事先用PHP+Mysql+jQuery结合ThinkPHP做了2个用户验证邮箱找回密码效用《ThinkPHP之PHP+Mysql+jQuery发送邮箱找回密码》,将来享受一下用CI框架结合PHPmailer发送QQ邮箱找回密码成效。

先是开启 Ajax,php.ini
的extension=php_openssl.dll && extension=php_sockets.dll;

下一场打开 smtp服务器 认证邮箱的smtp成效;
作者用的163邮箱,也足以用QQ邮箱,那一个团结挑选。

开启163smtp功能,登录163邮箱,找到“设置”,如图:

Ajax 1

开启QQsmtp功能,登录QQ邮箱,找到“设置”,如图:

Ajax 2

Ajax 3

下载PHPmailer解压到/application/libreries/目录下重命名为PHPmailer,如图:

Ajax 4

下载地址:github的phpmailer下载库。

主要用到那八个文本:

Ajax 5

在libraries下新建文件mailer.php;

defined('BASEPATH') OR exit('No direct script access allowed');

class Mailer{

    function sendMail($emailsubject,$emailbody,$smtpemailto){
        include_once("PHPMailer/class.smtp.php");       // 引入php邮件类
        include_once("PHPMailer/class.phpmailer.php");      // 引入php邮件类
        $mail= new PHPMailer();
        $mail->CharSet = "utf-8";                // 编码格式
        $mail->IsSMTP();
        $mail->SMTPAuth   = true;                   // 必填,SMTP服务器是否需要验证,true为需要,false为不需要
        $mail->Host       = "smtp.163.com";         // 必填,设置SMTP服务器
        $mail->Port       = 465;                     // 设置端口
        $mail->Username   = "开启smtp服务的邮箱账户";           // 必填,开通SMTP服务的邮箱;
        $mail->Password   = "开启smtp服务的邮箱密码";         // 必填, 以上邮箱对应的密码
        $mail->SMTPSecure = 'ssl';                 //传输协议
        $mail->From       = "发件人邮箱";       // 必填,发件人Email
        $mail->FromName   = "luokakale";             // 必填,发件人昵称或姓名
        $mail->Subject    = $emailsubject;          // 必填,邮件标题(主题)

        $mail->MsgHTML($emailbody);             //邮件内容
        $mail->AddReplyTo($smtpemailto);           // 收件人回复的邮箱地址
        $mail->AddAddress($smtpemailto);      // 收件人邮箱
        $mail->IsHTML(true);                 // 是否以HTML形式发送,如果不是,请删除此行

        if(!$mail->Send())
        {
            echo "发送失败: " . $mail->ErrorInfo;
        }
        else
        {
            echo '系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!';
        }

    }
}

只顾:如果协商是ssl 则端口为465;如若是tsl则是25。

接下去就是祥和举办邮箱验证的步调了,以上代码里面的参数不懂先不用管,一会再解释。

率先肯定要有一个找回密码填写邮箱的界面,上图:

Ajax 6

相应的次序如下:

 1 <form id="two">
 2         <ul>
 3             <li>
 4                 <img src="publicpassword.png"/>
 5                 <label>邮箱</label>
 6                 <input type="text" placeholder="请输入邮箱" id="password"/>
 7             </li>
 8         </ul>
 9         <input type="button" value="发送邮件" id="sendEmail"/>
10     </form>

体制我就不写了,自身写就行了,这不主要:

下一场还要进行部分邮箱验证,作者用的jQuery和Ajax还有最欣赏的layer插件来拓展邮箱验证以及传递数据

 1 $('#two input').eq(0).blur(function () {
 2             var preg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
 3             if ($(this).val().length == 0) {//没填写邮箱
 4                 layer.msg('邮箱不能为空')
 5             } else if (!preg.test($(this).val())) {//邮箱格式验证
 6                 layer.msg('邮箱格式不正确')
 7             } else {//获取用户填写的邮箱通过Ajax异步请求服务器
 8                 var email = $('#two input').eq(0).val();
 9                 $("#sendEmail").attr("disabled","disabled").val('提交中..').css("cursor","default");
10                 $.post("<?php echo base_url('FindpwdController/EmailVerify')?>",{mail:email},function(msg){
11                     if(msg=="noreg"){//如果返回 'noreg'
12                         layer.msg('该邮箱尚未注册')
13                         $("#sendEmail").removeAttr("disabled").val('提 交').css("cursor","pointer");
14                     }else{
15                         $("#demo").html("<h3>"+msg+"</h3>");
16                     }
17                 });
18             }
19         })

以上jQuery代码不是很难,相信只要学过好几jQuery的程序员们都能看懂的吧,接下去在controller接收请求处理数量,然后加载mailer类并调用sendMail方法,代码如下:

 1 //邮箱验证
 2     public function EmailVerify(){
 3         $email = $this->input->post('mail');//接收Ajax传递的参数
 4         $this->db->select('member_id,member_name,member_pwd');//进行邮箱验证
 5         $sql = $this->db->get_where('ecshop_member',"member_email='$email'")->row_array();
 6         $id = $sql['member_id'];
 7         if(!$id){//该邮箱尚未注册!
 8             echo 'noreg';
 9             exit;
10         }else{
11             $getpasstime = time(); //获取当前时间
12             $uid = $sql['member_id'];//用户id
13             $token = md5($uid.$sql['member_name'].$sql['member_pwd']);//组合验证码
14             $smtpemailto = $email; //收件人邮箱
15             $url = "http://www.msku.com/index.php/Home/Email/resetPwd?email=".$email."
16 &token=".$token;//构造重置密码地址的URL
17             $time = date('Y-m-d H:i');//构造时间
18             $emailsubject = "www.ci.com - 找回密码";//邮件主题
19             $emailbody = "亲爱的".$email.":<br/>您在".$time."提交了找回密码请求。请点击下面的链接重置密码
20 (按钮24小时内有效)。<br/><a href='".$url."'target='_blank'>".$url."</a>"; //邮件内容
21              //加载Mailer类调用sendMail方法传参
22             $this->load->library('Mailer');
23             $this->mailer->sendMail($emailsubject,$emailbody,$smtpemailto);
24             //更新数据时间
25             $addtime['member_addtime'] = $getpasstime;
26             $this->db->update('member',$addtime,"member_id=$uid");
27         }
28     }

结缘地点的mailer类里面的八个参数,就基本上做好了,解释一下那五个参数。$emailsubject指的是殡葬邮件的大旨,$emailbody指的是邮件内容在那边笔者写的情节是用户收到的邮件重置密码的链接,$smtpmailto指的是收件人的邮箱,在此间就是用户注册时填写的信箱账号。再试一下,成功接到邮件:

Ajax 7

用CI框架发送邮件找回密码的法力已经完成了,至于重置密码就不演示了,以上内容希望对在这方面有题目标同行们全体帮忙,

本文属原创内容,为了强调外人劳动,转发请申明本文地址:

 http://www.cnblogs.com/luokakale/p/7249016.html

相关文章