CI框架使用PHPmailer发送邮件找回密码
之前用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发送邮件找回密码的更多相关文章
- ci框架(codeigniter)Email发送邮件、收件人、附件、Email调试工具
ci框架(codeigniter)Email发送邮件.收件人.附件.Email调试工具 Email 类 CodeIgniter 拥有强大的 Email 类来提供如下的功能: 多 ...
- PHP CI框架email类发送邮件
用CI框架发送邮件类 在中文标题太长的情况下会出现乱码,搜索后说是发送邮件的时候有标题长度的限制,按说的方法修改后,还是没能得到解决,后来发现需要转换邮件标题的编码,解决方法如下: 打开 librar ...
- CI框架Email类发送邮件提示Unable to send data: . The following SMTP error was encountered: Unable to .......
最近服务器迁移,然后CI框架做的项目发邮件全挂掉了,刚开始是25端口没开,然后开了正好还是有问题, 1.打印请求信息和返回信息 echo $this->email->print_debug ...
- CI框架学习——检查用户名与密码是否合法(二)
检查用户名与密码是否合法 步骤一.编写用户登录的窗体见下面内容 步骤二.编写数据库校验方法 $username = $_POST["username"]; # ...
- 用phpmailer发送邮件提示SMTP Error: Could not connect to SMTP host解决办法
之前做项目的时候做了一个用phpmailer发送邮件的功能<CI框架结合PHPmailer发送邮件>,昨天步署上线(刚开始用新浪云,嫌贵,换成阿里了),测试的时候,发送邮件却意外报错了.. ...
- spring mvc下实现通过邮箱找回密码功能
1功能分析 通过spring mvc框架实现通过邮箱找回密码. 2 实现分析 主要是借助某个邮箱的pop3/smtp服务实现的邮件代发功能. 3 源码分析 3.1首先在用户表对应的javabean中加 ...
- Django 邮箱找回密码!!!!!!!!!!!!!!!!
1.大概流程. @首先在完善登陆页面,增加忘记密码的链接. @为了账户安全,需要对操作者进行验证,向邮箱发随机数验证! @在重置验证码页面,验证验证码是否匹配(验证成功跳转至更改密码也页面). @ 重 ...
- 解决ci框架php发送邮件附件中文乱码问题
CI框架发送邮件附件中文出现乱码,是因为php basename()函数不支持中文引起,修改类库 Email.php 文件中 _append_attachments()方法,大致在 1474行 添加如 ...
- 在CI中集成phpmailer,方便使用SMTP发送邮件
直接使用phpmailer的话,有时候不是很方便,特别你的很多功能都是基于CI完成的时候,要相互依赖就不方便了,所以在想,那是否可以将phpmailer集成到CI中呢,像使用email类这样使用他,功 ...
随机推荐
- iOS下OpenCV开发用OC还是Swift
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实标题中这个问题并不准确,准确的说法应该是iOS下的OpenCV开发是使用OC还是Swift ...
- Myeclipse 2014破解教程
现在很多java编程软件人士大都使用MyEclipse,这软件的强大之处我就不说了,我说下安装步骤与破解步骤,若无JDK则先安装再配置环境变量,这个我就不讲了 工具/原料 MyEclipse安装包 ...
- cmd 编译java WebService
格式:wsimport -s "src目录" -p "生成类所在包名" -keep "wsdl发布地址" 示例: wsimport -s G ...
- 想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ #精选JAVASCRIPT前端开发
想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ 作为一个软(ku)件(bi)工(de)程(ma)师(nong),你有没有觉得做什么事都没时间?没时间学习新东西,没时间去回顾.整理原来写的烂代 ...
- 数据处理不等式:Data Processing Inequality
我是在差分隐私下看到的,新解决方案的可用性肯定小于原有解决方案的可用性,也就是说信息的后续处理只会降低所拥有的信息量. 那么如果这么说的话为什么还要做特征工程呢,这是因为该不等式有一个巨大的前提就是数 ...
- 微信小程序用setData修改数组或对象中的一个属性值
在page中有如下数组 data: { info:[ { name:"yuki", tou:"../img/head.jpg", zGong:130, gMon ...
- Leetcode题解(十六)
44 ----------------------------------------------------------------分割线------------------------------ ...
- Android 开发笔记___时间选择器---timePicker
像datepicker一样,也有timepicker. 同样有timepickerdialog 所用到的方法还是一样,监听时间选择器的变化. package com.example.alimjan.h ...
- 一键生成koa/koa2项目:
一键生成koa/koa2项目: 1. npm install -g koa-generator 2.新建项目目录 koa mytest (koa1项目) koa2 koa2test (koa2项目) ...
- 一些神奇的JS功效
1: 沉睡排序 var numbers=[1,2,3,4,5,5,99,4,20,11,200]; numbers.forEach((num)=>{ setTimeout(()=>{ co ...