今天忽然想写一个用户修改密码的功能,又没有短信接口,只能选择用邮箱发送验证码啦,穷啊,没办法,哈哈,以下为正文。

------------------------------------------------------------------------------------------------------------------------------------------------------------

1、准备工作

(1)下载PHPMailer,插件,下载地址:链接:http://pan.baidu.com/s/1hskrDqs 密码:dcs9

(2)将下载好的文件加压,放在thinkphp扩展库内(个人存放路径:根目录\ThinkPHP\Library\Vendor\PHPMailer)

2、代码拼写

(1)在根目录\项目目录\Common\conf\config.php内,加入以下代码;

// 配置邮件发送服务器
    'MAIL_HOST' =>'smtp.163.com',//smtp服务器的名称
    'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证
    'MAIL_USERNAME' =>'99999999@163.com',//发件人的邮箱名
    'MAIL_PASSWORD' =>'9999999',//163邮箱发件人授权密码
    'MAIL_FROM' =>'9999999@163.com',//发件人邮箱地址
    'MAIL_FROMNAME'=>'某某名',//发件人姓名
    'MAIL_CHARSET' =>'utf-8',//设置邮件编码
    'MAIL_ISHTML' =>TRUE, // 是否HTML格式邮件

注释:以下参数

    发件人的邮箱名,

    163邮箱发件人授权密码,

    发件人邮箱地址,

    发件人姓名

请自行更改(附163邮箱发件人授权密码获取方式)。

(2)在根目录\项目目录\Common\Common内,新建function.php文件,并加入以下代码;

<?php
/*
 * 发送邮件
 * @param $to string
 * @param $title string
 * @param $content string
 * @return bool
 * */
function sendMail($to, $title, $content) {
 Vendor('PHPMailer.PHPMailerAutoload');
 $mail = new PHPMailer(); //实例化
 $mail->IsSMTP(); // 启用SMTP
 $mail->Host=C('MAIL_HOST'); //smtp服务器的名称(这里以QQ邮箱为例)
 $mail->SMTPAuth = C('MAIL_SMTPAUTH'); //启用smtp认证
 $mail->Username = C('MAIL_USERNAME'); //发件人邮箱名
 $mail->Password = C('MAIL_PASSWORD') ; //163邮箱发件人授权密码
 $mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址)
 $mail->FromName = C('MAIL_FROMNAME'); //发件人姓名
 $mail->AddAddress($to,"尊敬的客户");
 $mail->WordWrap = 50; //设置每行字符长度
 $mail->IsHTML(C('MAIL_ISHTML')); // 是否HTML格式邮件
 $mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码
 $mail->Subject =$title; //邮件主题
 $mail->Body = $content; //邮件内容
 $mail->AltBody = "这是一个纯文本的身体在非营利的HTML电子邮件客户端"; //邮件正文不支持HTML的备用显示
 return($mail->Send());
}

(3)本人使用的是ajax发送验证码,以下为html代码;

<form method="post" action="">
        <input name="forget_name" id="forget_name" placeholder="账号" required="" type="text">
        <hr class="hr15">
        <input name="forget_email" placeholder="邮箱" id="forget_email" required="" type="text" style="width:70%">
        <a href="#" onclick="send();">发送验证码</a>
        <hr class="hr15">
        <input name="code" placeholder="验证码" required="" type="text">
        <hr class="hr15">
        <input name="new_pass" placeholder="新密码" required="" type="text">
        <hr class="hr15">
        <input value="发送验证码" style="width:100%;" type="submit">
        <hr class="hr20">
        <a href="">登录</a>
    </form>
    <script>
        function send(){
           var name = $('#forget_name').val();
           var email = $('#forget_email').val();
            $.ajax({
                type:"get",
                url:"http://127.0.0.1/index.php/Edu/Login/send.html",
                async:true,
                contentType:"application/json",
                dataType:"json",
                data:{"forget_name":name,"forget_email":email},
                success:function(data){
                    alert(data);
                }
            });
        }
    </script>
    <script src="__PUBLIC__/Admin/style/jquery.min.js"></script>

(4)以下为php代码;

//发送邮件验证码
    public function send(){
        if(IS_AJAX){
            //接收账号信息
            $data['name'] = I('get.forget_name');
            if(!$data['name']) $this->ajaxReturn("请填写登录账号",0);
            //接收邮箱
            $data['email'] = I('get.forget_email');
            if(!$data['email']) $this->ajaxReturn("请填写邮箱账号",0);
            //验证邮箱格式
            $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
            if(preg_match( $pattern, $data['email'])){
                //邮箱格式正确下,判断用户是否存在
                $Manager = D('Manager');
                $condition['display'] = 1;
                $condition['name'] = $data['name'];
                $condition['status'] > 1;
                $ManagerInfo = $Manager->where($condition)->find();
                if($ManagerInfo){
                    //核对用户账号与邮箱是否一致
                    if($ManagerInfo['email'] == $data['email']){
                        //设置参数
                        $title = "邮箱验证";    //邮件标题
                        $font = "此邮件为找回密码验证邮件,请勿回复,您的验证码为"; //邮件内容
                        $code = rand(1000,9999);    //随机码
                        $content = $font.$code; //拼接
                        if(SendMail($data['email'],$title,$content)) {
                                //存验证码
                                $Condition['code'] = $code;
                                $Condition['updatetime'] = time();
                                $Cond['name'] = $data['name'];
                                $ManagerSave = $Manager->where($Cond)->save($Condition);
                                if($ManagerSave){
                                     $this->ajaxReturn("发送成功",0);
                                }else{
                                    $this->ajaxReturn("验证码保存失败",0);
                                }
                        }else{
                            $this->ajaxReturn("发送失败",0);
                        }
                    }else{
                        $this->ajaxReturn("请核对用户信息的正确性",0);
                    }
                }else{
                    $this->ajaxReturn("请核对用户信息",0);
                }
            }else{
                $this->ajaxReturn("请核对邮箱信息",0);
            }
        }else{
            $this->ajaxReturn(0);
        }
    } 

(5)QQ邮箱验证码接收情况;

Thinkphp3.2版本使用163邮箱发(验证码)邮件的更多相关文章

  1. mailx加163邮箱发邮件

    mailx加163邮箱发邮件 参考:https://www.cnblogs.com/myvic/p/9579954.html 配置 $ yum install mailx -y $ vim /etc/ ...

  2. python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式

    配置文件:UiObjectMapSendMap.ini用来存放配置信息 GetOptionSendMail.py 用来读取配信息 #encoding=utf-8from selenium.webdri ...

  3. 项目一:第八天 1、前台系统导入 实现客户注册 发验证码,邮件 springdata-redis存储数据 3、实现客户登陆

    1 前台系统客户注册功能 页面:signup.html 1.1 验证手机号是否注册(邮箱同样) 1. 使用Jquery-validate插件进行相关校验,使用校验规则 <input type=& ...

  4. java实现邮箱发送信息--验证码的发送(163邮箱)

    1.maven环境 <!-- 发送邮件 --> <dependency> <groupId>javax.mail</groupId> <artif ...

  5. Thinkphp3.2 PHPMailer 发送 QQ邮箱 163邮箱

    在进入正题这前先看下网易(163)邮箱的服务器地址和端口号 类型 服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号 收件服务器 POP pop.163.com 995 110 收件服务器 ...

  6. Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)

    Thinkphp5本身并没有实现发邮件的功能,至少据我所知. 本文利用网易邮箱作为发邮件的邮箱.作为发送邮件的前提是需要开启SMTP服务,打开网易邮件,点击设置按钮,如下图所示 勾选smtp服务 保存 ...

  7. java邮件发送 qq与163邮箱互发和qq和163邮箱发送其他邮箱实例

    研究了近一天的时间,通过查阅相关资料,终于对java发送邮件的机制,原理有了一点点的理解,希望能够帮到大家! 1.首先要向你的项目里导入1个jar包:mail-1.4.4.jar即可(实现qq和163 ...

  8. [转]Redmine 配置163邮箱

    redmine的邮件发送功能还是很有用的.像项目有更新啦,任务分配啦,都能邮件发送的相关责任人.我自己在linux服务器上安装并启动了redmine后,邮件一直发送了不了.查了网上的资料,都是讲修改下 ...

  9. python登录网易163邮箱,爬取邮件

    from common import MyRequests,LoggerUntil,handle_exception myRequests.update_headers({ 'Accept':'tex ...

随机推荐

  1. web前端笔记整理---CSS

    一   Css  文件 Css: 美化HTML的 4种选择器: 元素选择 类选择 ID选择 伪类选择 常用的布局方案 1 写在什么位置能好用. 1.1 元素里面 优先级是最高的 1.2 元素外,文件内 ...

  2. 读书笔记--C陷阱与缺陷(二)

    第二章 1. 理解函数声明 书中分析了复杂的类型声明方式,也说明了使用typedef声明会更好理解,推荐大家使用typedef进行函数声明. 书中类型分析一层一层挖掘,让读者可以理解多层嵌套的类型含义 ...

  3. Docker+Gogs搭建个人Git服务

    欢迎 经常使用Github的我,Github它功能强大,操作简单,不用FQ,所以大家会使用Github进行代码托管,但是,Github的私仓收费的,而且对于普通个人用户来说,价格也不便宜.很多人搭建自 ...

  4. 【实验吧】逆向rev50

    a simple reverse view 解题链接: http://ctf5.shiyanbar.com/reverse/rev50/rev50 看了别人写的wp得知是挂载参数执行. 补充:gdb挂 ...

  5. Java面试准备之集合框架

    集合框架 Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的(元素存取是有序).可重复 ...

  6. MongoDB三节点高可用模式安装

    设备: 三个1G.20G.1核的虚拟机,系统是SentOS7 min 清除原始自数据目录: rm -fr /home/mongosingle/ 创建目录: mkdir -p /home/mongosi ...

  7. Haproxy基于ACL做访问控制

    author:JevonWei 版权声明:原创作品 haproxy配置文档 https://cbonte.github.io/haproxy-dconv/ 基于ACL做访问控制(四层代理) 网络拓扑 ...

  8. 【JavaScript基础系列】决定你的人生能走多远的,是基础。

    前言 javaScript门槛非常低,一点语法,一个dom,一个bom就可以使用它开发大部分js应用,再加上现在层出不穷的框架极大的简化抽象了javaScript的使用方式,但是我们始终不能忘记的一点 ...

  9. linux bash 和 sh的区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt189 Linux 中的 shell 有很多类型,其中最常用的几种是: Bou ...

  10. zookeeper简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt193 ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系 ...