之前用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邮箱,找到“设置”,如图:

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

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

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

主要用到这两个文件:

在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。

接下来就是自己进行邮箱验证的步骤了,以上代码里面的参数不懂先不用管,一会再解释。

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

对应的程序如下:

 <form id="two">
<ul>
<li>
<img src="public/images/password.png"/>
<label>邮箱</label>
<input type="text" placeholder="请输入邮箱" id="password"/>
</li>
</ul>
<input type="button" value="发送邮件" id="sendEmail"/>
</form>

样式我就不写了,自己写就行了,这不重要:

然后还要进行一些邮箱验证,我用的jQuery和Ajax还有最喜欢的layer插件来进行邮箱验证以及传递数据

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

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

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

结合上面的mailer类里面的三个参数,就差不多做好了,解释一下这三个参数。$emailsubject指的是发送邮件的主题,$emailbody指的是邮件内容在这里我写的内容是用户收到的邮件重置密码的链接,$smtpmailto指的是收件人的邮箱,在这里就是用户注册时填写的邮箱账号。再试一下,成功收到邮件:

用CI框架发送邮件找回密码的功能已经实现了,至于重置密码就不演示了,以上内容希望对在这方面有问题的同行们有所帮助,

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

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

CI框架使用PHPmailer发送邮件找回密码的更多相关文章

  1. ci框架(codeigniter)Email发送邮件、收件人、附件、Email调试工具

        ci框架(codeigniter)Email发送邮件.收件人.附件.Email调试工具 Email 类         CodeIgniter 拥有强大的 Email 类来提供如下的功能: 多 ...

  2. PHP CI框架email类发送邮件

    用CI框架发送邮件类 在中文标题太长的情况下会出现乱码,搜索后说是发送邮件的时候有标题长度的限制,按说的方法修改后,还是没能得到解决,后来发现需要转换邮件标题的编码,解决方法如下: 打开 librar ...

  3. CI框架Email类发送邮件提示Unable to send data: . The following SMTP error was encountered: Unable to .......

    最近服务器迁移,然后CI框架做的项目发邮件全挂掉了,刚开始是25端口没开,然后开了正好还是有问题, 1.打印请求信息和返回信息 echo $this->email->print_debug ...

  4. CI框架学习——检查用户名与密码是否合法(二)

    检查用户名与密码是否合法 步骤一.编写用户登录的窗体见下面内容 步骤二.编写数据库校验方法 $username = $_POST["username"];            # ...

  5. 用phpmailer发送邮件提示SMTP Error: Could not connect to SMTP host解决办法

    之前做项目的时候做了一个用phpmailer发送邮件的功能<CI框架结合PHPmailer发送邮件>,昨天步署上线(刚开始用新浪云,嫌贵,换成阿里了),测试的时候,发送邮件却意外报错了.. ...

  6. spring mvc下实现通过邮箱找回密码功能

    1功能分析 通过spring mvc框架实现通过邮箱找回密码. 2 实现分析 主要是借助某个邮箱的pop3/smtp服务实现的邮件代发功能. 3 源码分析 3.1首先在用户表对应的javabean中加 ...

  7. Django 邮箱找回密码!!!!!!!!!!!!!!!!

    1.大概流程. @首先在完善登陆页面,增加忘记密码的链接. @为了账户安全,需要对操作者进行验证,向邮箱发随机数验证! @在重置验证码页面,验证验证码是否匹配(验证成功跳转至更改密码也页面). @ 重 ...

  8. 解决ci框架php发送邮件附件中文乱码问题

    CI框架发送邮件附件中文出现乱码,是因为php basename()函数不支持中文引起,修改类库 Email.php 文件中 _append_attachments()方法,大致在 1474行 添加如 ...

  9. 在CI中集成phpmailer,方便使用SMTP发送邮件

    直接使用phpmailer的话,有时候不是很方便,特别你的很多功能都是基于CI完成的时候,要相互依赖就不方便了,所以在想,那是否可以将phpmailer集成到CI中呢,像使用email类这样使用他,功 ...

随机推荐

  1. 微信小程序左滑删除功能

    效果图如下: wxml代码: <view class="container"> <view class="touch-item {{item.isTou ...

  2. 理解typename的两个含义

    理解typename的两个含义 问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? template<class T> ...

  3. Codeforces 378B. Parade

    B. Parade time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  4. IdentityServer4 配置负载均衡

    如果使用 IdentityServer4 做授权服务的负载均衡,默认情况下是不可以的,比如有两个授权服务站点,一个资源服务绑定其中一个授权服务(Authority配置),如果通过另外一个授权服务获取a ...

  5. Android 开发笔记___shape

    shape_oval <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android= ...

  6. POI不同版本替换Word模板时的问题

    一.问题描述 通过POI,把Word中的占位符替换为实际的值,以生成复杂结构的业务报告. 在POI 3.9上,功能正常.由于某些原因升级到POI 3.10.1后,项目组反馈说Word模板出错,无法生成 ...

  7. Java多线程Master-Worker模式

    Java多线程Master-Worker模式,多适用于需要大量重复工作的场景中. 例如:使用Master-Worker计算0到100所有数字的立方的和 1.Master接收到100个任务,每个任务需要 ...

  8. 原生js实现简单移动端轮播图

    最近项目不是很忙,自己就用原生js写了一个简单的移动端轮播图的小demo,可实现自动轮播和手势滑动轮播,然后就把它记录到个人博客里.还有很多不足的地方,希望多多指出,以便改进. 1.代码部分 分为四个 ...

  9. NHibernate Criteria中 Restriction与Expression的差别

    http://stackoverflow.com/questions/5483393/nhibernate-criteria-restriction-vs-expression 据说是Restrict ...

  10. JavaScript面向对象(收集整理)

    (1)封装 首先理解构造函数:所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上. f ...