前面用PHP+Mysql+jQuery结合ThinkPHP做了一个用户征邮箱找回密码功能《ThinkPHP之PHP+Mysql+jQuery发送邮箱找回密码》,现在分享一下就此CI框架结合PHPmailer发送QQ邮箱找回密码功能。

率先初步启 php.ini
的extension=php_openssl.dll && extension=php_sockets.dll;

然后开 smtp服务器 认证邮箱的smtp功能;
我之所以之163信箱,也可据此QQ邮箱,这个自己挑。

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

图片 1

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

图片 2

图片 3

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

图片 4

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

根本为此到马上点儿独文本:

图片 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。

连通下便是团结开展邮箱验证的步子了,以上代码里面的参数不掌握先不用无,一会另行解释。

第一定要有一个摸回密码填写邮箱的界面,上图:

图片 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指的是收件人之邮箱,在此处就用户注册时填写的邮箱账号。再试一下,成功收邮件:

图片 7

用CI框架发送邮件找回密码的功力已落实了,至于重置密码就无演示了,以上内容要对以就点发题目的同行们有助,

本文属原创内容,为了珍惜他人劳动,转载请注明本文地址:

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

相关文章

网站地图xml地图