1. 程式人生 > >Thinkphp3.2版本使用163郵箱發(驗證碼)郵件

Thinkphp3.2版本使用163郵箱發(驗證碼)郵件

-- pre 163郵箱 find .html 註釋 郵件客戶端 方式 接收

今天忽然想寫一個用戶修改密碼的功能,又沒有短信接口,只能選擇用郵箱發送驗證碼啦,窮啊,沒辦法,哈哈,以下為正文。

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

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‘ =>‘[email protected]‘,//發件人的郵箱名
    ‘MAIL_PASSWORD‘ =>‘9999999‘,//163郵箱發件人授權密碼
    ‘MAIL_FROM‘ =>‘[email protected]‘,//
發件人郵箱地址 ‘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郵箱發(驗證碼)郵件