tp5.1及tp5.0实现发送邮箱验证码

1.首先将发送邮件的拓展包放到thinkphp框架的vendor目录下

 2.在框架公共方法文件中添加以下方法

/**
 * [SendMail 邮件发送]
 * @param [type] $address  [description]
 * @param [type] $title    [description]
 * @param [type] $message  [description]
 * @param [type] $from     [description]
 * @param [type] $fromname [description]
 * @param [type] $smtp     [description]
 * @param [type] $username [description]
 * @param [type] $password [description]
 */
function SendMail($address,$mail_code='123456')
{
    include(Env::get("root_path").'/vendor/phpmailer/PHPMailerAutoload.php');  //tp5.1引用方法
//    vendor('phpmailer.PHPMailerAutoload'); //tp5.0引用方法
    $mail = new \PHPMailer();

    // 设置PHPMailer使用SMTP服务器发送Email

    //是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
//    $mail->SMTPDebug = 1;

    $mail->IsSMTP();
    // 设置邮件的字符编码,若不指定,则为'UTF-8'
    $mail->CharSet='UTF-8';
    // 添加收件人地址,可以多次使用来添加多个收件人
    $mail->AddAddress($address);

    $data = \think\Db::name('emailconfig')->where('email','email')->find();
    $title = $data['title'];
    $message = $data['content'].$mail_code;
    $from = $data['from_email'];
    $fromname = $data['from_name'];
    $smtp = $data['smtp'];
    $username = $data['username'];
    $password = $data['password'];
    // 设置邮件正文
    $mail->Body=$message;
    // 设置邮件头的From字段。
    $mail->From=$from;
    // 设置发件人名字
    $mail->FromName=$fromname;
    // 设置邮件标题
    $mail->Subject=$title;
    // 设置SMTP服务器。
    $mail->Host=$smtp;

    //设置使用ssl加密方式登录鉴权
    $mail->SMTPSecure = 'ssl';
    //设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587
    $mail->Port = 465;

    // 设置为"需要验证" ThinkPHP 的config方法读取配置文件
    $mail->SMTPAuth=true;
    //设置html发送格式
    $mail->isHTML(true);
    // 设置用户名和密码。
    $mail->Username=$username;
    $mail->Password=$password;
    return($mail->Send());

}

3.在你的控制器中定义一个发送验证码的方法(以下是5.1的独立验证规则写法,5.0的独立验证规则自行查阅文档),发送成功后将的验证码储存到cookie中

    //发送邮箱验证
    public function send_mail(){
        $data = $this -> request -> post();
        //1.验证规则
        $rule = [
            'email|邮箱'=>'require|email',//必填,不能为空 | 邮箱格式
        ];
        //2.添加字段的验证规则:初始化rule属性
        Validate::rule($rule);
        //3.数据效验
        if(!Validate::check($data)){
            $this->json([],Validate::getError(),201);
        }

        $mail_code = rand(000000,999999);
        $mailto = SendMail($data['email'],$mail_code);
        if(false == $mailto) {
            $this->json([],'发送失败',201);
        } else {
            cookie('mail_code', $mail_code, 180);
            $this->json([],'邮箱验证码发送成功,3分钟内有效',200);
        }
    }

4.获取cookie中的邮箱验证码进行自己的业务操作判断就可以了。


版权声明:本文为weixin_44905544原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。