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类这样使用他,功 ...
随机推荐
- php语法标记风格
1.xml风格(标准风格推荐使用) 复制代码 代码如下: <?php echo"这是xml风格的标记"; ?> xml风格的标记是常用的标记,也是推荐使用的标记,服务器 ...
- linux下使用crontab实现定时PHP计划任务失败的原因分析
这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下 很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...
- lua State加载部分库
lua State加载部分库 在lua中,通常我们用luaL_openlibs(L)加载所有的lub标准库,但是有时候我们想只加载部分,有没有什么好的办法呢?在luaproc看到如下办法: stati ...
- 2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) K Tournament Wins
题目链接:http://codeforces.com/gym/101201 /* * @Author: lyucheng * @Date: 2017-10-22 14:38:52 * @Last Mo ...
- ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证
OpenID Connect OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层. 它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似R ...
- 隐藏input的光标
https://segmentfault.com/q/1010000000684888 https://wap.didialift.com/beatles/campaign/driver/activi ...
- Python datetime之timedelta
该函数表示两个时间的间隔 参数可选.默认值都为0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minut ...
- SQL Server Backup & Restore
USE [master]; GO CREATE DATABASE test; GO CREATE DATABASE test2; GO BACKUP DATABASE test TO DISK = ' ...
- Python做的第一个小项目-模拟登陆
1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户 主要采用循环语句和条件语句进行程序流程的控制,加入文件的读写操作 while True: choice ...
- QT中槽的使用
一.建立槽和按钮之间的连接 connect(信号发送者,发送的信号,信号接收者,信号接收者的槽函数) 1.例子 connect(ui->pushButton,SIGNAL(clicked(boo ...