之前用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. N厂水鬼烂大街?那来看ZF厂V4帝舵小红花

    自从帝舵小红花推上市面之后,各大工厂都在推出新版本,但做得最成熟的还是ZF厂,帝舵这个品牌是非常低调的,很少有人关注,但是ZF厂在这款腕表也是下了不少功夫,曾经帝舵小红花和N厂水鬼并列为最顶级的表畅销 ...

  2. 学习笔记TF052:卷积网络,神经网络发展,AlexNet的TensorFlow实现

    卷积神经网络(convolutional neural network,CNN),权值共享(weight sharing)网络结构降低模型复杂度,减少权值数量,是语音分析.图像识别热点.无须人工特征提 ...

  3. JDBC 连接数据库的步骤

    1.JDBC (JAVA DATABASE CONNECTION) (Java 数据库 连接)2.JAVA 面向对象的编程语言 (汉语) || || 标准(接口)---->jar包(mysql- ...

  4. showmemory.c 和 hello.s 源码

    showmemory.c 和 hello.s 源码 /** * showmemory.c -- print the position of different types of data in a p ...

  5. poj 2566 Bound Found

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4384   Accepted: 1377   Spe ...

  6. 磁盘管理之 raid 文件系统 分区

    第1章 RAID 磁盘阵列 1.1 使用raid的目的 1)获得更大的容量 2)让数据更安全 3)读写速度更快 1.2 raid0.raid1.raid5.raid10对比 磁头 0磁道 1扇区 前4 ...

  7. 5. 监视和ZooKeeper操作

    ZooKeeper中的写入(write)操作是原子性和持久性的. 写入到大多数ZooKeeper服务器上的持久性存储中,可以保证写操作成功. 无论如何,ZooKeeper的最终一致性模型允许读取(re ...

  8. C#用panel实现子窗体的切换

    今天编程的时候,遇到一个问题:在同一个窗体区域加载两个不同的窗体,每次只显示一个子窗体并能够对这两个子窗体做切换. 对于这个问题用panel控件是非常简单的,只要每次清空panel控件上的子窗体,然后 ...

  9. 一个ICON图标的转换程序

    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换.具体的程序就在下面,如果看的人多,过两天再把思路写一下.废话不说,见代码.                       ...

  10. 移动端效果之LoadMore

    写在前面 列表一直是展示数据的一个重要方式,在手机端的列表展示又和PC端展示不同,毕竟手机端主要靠滑.之前手机端之前一直使用的IScroll,但是IScroll本身其实有很多兼容性BUG,想改动一下需 ...