PHP实现邮箱验证码验证功能

*本文将主要说明:PHP实现邮箱验证码验证功能,通过注册或登录向用户发送身份确认验证码,并通过判断输入的验证码是否正确做出登录判断。

 


 

实现邮箱验证码功能有三个步骤:

1、下载 PHPMailer 组件:https://github.com/PHPMailer/PHPMailer

2、编写随机数(验证码)函数:

<?php
//生成6位随机验证码
function codestr(){
    $arr=array_merge(range('a','b'),range('A','B'),range('0','9'));
    shuffle($arr);
    $arr=array_flip($arr);
    $arr=array_rand($arr,6);
    $res='';
    foreach ($arr as $v){
        $res.=$v;
}
return $res;
}
?>

 

3、编写调用核心组件程序:

<?php

//[*邮件发送逻辑处理过程*系统核心配置文件*]


use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//调用PHPMailer组件,此处是你自己的目录,需要改写。
require '../PhpEmail/PHPMailer-master/src/Exception.php';
require '../PhpEmail/PHPMailer-master/src/PHPMailer.php';
require '../PhpEmail/PHPMailer-master/src/SMTP.php';

$mail = new PHPMailer(true);       // Passing `true` enables exceptions
try {
    //服务器配置
    $mail->CharSet ="UTF-8";                     //设定邮件编码
    $mail->SMTPDebug = 0;                        // 调试模式输出
    $mail->isSMTP();                             // 使用SMTP
    $mail->Host = '	smtp.qq.com';            // SMTP服务器
    $mail->SMTPAuth = true;                      // 允许 SMTP 认证
    $mail->Username = '**********';              // SMTP 用户名  即邮箱的用户名
    $mail->Password = '****************';        // SMTP 密码  部分邮箱是授权码(例如163邮箱)
    $mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议
    $mail->Port = 465;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持

    $mail->setFrom('*********qq.com', 'Mailer');  //发件人(以QQ邮箱为例)
    
    $mail->addAddress($Email, 'Joe');  // 收件人($Email可以为变量传值,也可为固定值)
    //$mail->addAddress('ellen@example.com');  // 可添加多个收件人
    $mail->addReplyTo('*********@qq.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致
    //$mail->addCC('cc@example.com');                    //抄送
    //$mail->addBCC('bcc@example.com');                    //密送

    //发送附件
    // $mail->addAttachment('../xy.zip');         // 添加附件
    // $mail->addAttachment('../thumb-1.jpg', 'new.jpg');    // 发送附件并且重命名
    
    $yanzhen = codestr();  //此处为调用随机验证码函数(按照自己实际函数名改写)

    //Content
    $mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容
    $mail->Subject = '******身份登录验证';
    $mail->Body    = '<h1>欢迎使用******</h1><h3>您的身份验证码是:<span>'.$yanzhen.'</span></h3>' . date('Y-m-d H:i:s');
    $mail->AltBody = '欢迎使用********,您的身份验证码是:'.$yanzhen . date('Y-m-d H:i:s');

    $mail->send();
    echo '验证邮件发送成功,请注意查收!';
} catch (Exception $e) {
    echo '邮件发送失败: ', $mail->ErrorInfo;
}

}

?>

 

完成以上三个步骤即可实现向用户发送邮箱验证码的功能。


 

 

但是,事情并没有结束,向用户发送验证码成功后,对用户提交的验证码如何判断输入的验证码是否正确呢?如果正确,达到身份确认效果,否则反之。请看下面实例:

写实例之前,为了让大家更加明确程序中的文件名以及变量的作用,我们先规定:

1、将调用核心组件程序 命名为 email.php

2、规定验证码存放的变量名为 $yanzhen

3、将 用户输入的验证码 的post表单值命名为 YanEmail

4、规定使用POST提交表单

5、规定接收POST值的页面 命名为 yanzhen.php

规定了以上规则后,下面开始实例演示:

首先是用户输入页面:

<!DOCTYPE HTML> 
<html>
<head>
<meta charset="utf-8">
<title>登录</title>
<style>
.error {color: #FF0000;}
.tip {text-align:center; padding-top:10%}
</style>
</head>
<body> 

<div class="tip">

<h2>邮箱验证页面</h2>

<form method="post" action="yanzhen.php"> 
    <span><?php echo $Email;?></span></br>  //此处的$Email为接收用户的邮箱(这儿看自己需求,可以是数据库查询,也可以是手动输入,只需要最后赋值给$Email即可)
    <span class="error"><?php include 'email.php';?></span>  //此处为导入email.php文件,自动向用户发送验证邮箱
    <br><br>
    <input type="text" name="YanEmail" placeholder="请输入验证吗">  //此处为用户输入的验证码
    <input type="hidden" name="yanzhen" value="<?php echo $yanzhen;?>" >  //此处为系统向用户发送的验证码(注意:这样写对系统不安全,按照自己需求更改吧),
    <input type="submit" name="submit" value="验证">

</form>
</div>

</body>
</html>

  

POST表单接收页面(yanzhen.php):

<?php

$yan = $_POST["YanEmail"];  //接受用户输入的验证码
$zhen = $_POST["yanzhen"];  //接受系统发送的验证码(注意:此处不安全,需要自己修改)

if ($yan === $zhen) {
    echo '邮箱验证成功';
    // code...
} else {
    echo '邮箱验证失败';
    }

?>

  


 

到这就完成了PHP实现邮箱验证码功能的实现。其实没啥技术含量,就是可能逻辑上需要理清自己想要什么功能。

文章中如有错误,请留言指出,个人技术能力有限,希望可以帮到你。

转载请注明来源!谢谢!!!

 

 

posted @ 2020-07-05 14:52  混子···  阅读(4574)  评论(0编辑  收藏  举报