之前用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. TensorFlow Object Detection API(Windows下训练)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 最近事情比较多,前面坑挖的有点久,今天终于有时间总结一下,顺便把Windows下训练跑通.Li ...

  2. 用C写的计算运行时间

    #include <stdio.h> #include <stdlib.h> #include <time.h> int main( void ) { long i ...

  3. C++获取Windows7 32位系统中所有进程名(类似于任务管理器中的进程)

    代码是网上查找资料,然后自己调试,修改之后可以运行. 系统:win7 32位,VS2008 ------------------------------------------------------ ...

  4. javaCountDownLatch闭锁

    package com.java.concurrent; import java.util.concurrent.CountDownLatch; /** * CountDownLatch: 闭锁,在完 ...

  5. Cocoapods使用过程中遇到的问题

    前言:记录一些在CocoaPods使用过程中遇到的问题,本地环境:Xcode9.0 发现有的时候在执行pod init的时候不能正常地创建出来pod File文件,显示的错误如下: ――― MARKD ...

  6. 05).30分钟学会Servlet+过滤器+监听器+实际案例

    一.Servlet简介: Servlet程序处理流程 二.Servlet程序实现 实现要求 Servlet属于java ee范畴,而java和javac属于java se范畴,要想编译servlet必 ...

  7. Python学习——列表

    定义:1.列表(list)是由一系列特定顺序排列的元素组成,可以包含字母,数字或者将任何东西加入列表. 2.列表的标识符号为 [ ],函数名称为list 3.列表是有序的 相关概念: 元素:列表中的值 ...

  8. spring boot跨域设置

    定义 跨域是指从一个域名的网页去请求另一个域名的资源 跨域背景 限制原因 如果一个网页可以随意地访问另外一个网站的资源,那么就有可能在客户完全不知情的情况下出现安全问题 为什么要跨域 公司内部有多个不 ...

  9. python 小白(无编程基础,无计算机基础)的开发之路 day1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  10. Maven2的配置文件settings.xml

    简介: 概览 当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用settings.xml中的settings元素来确定这些配置.这包含 ...