*本文將主要說明: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實現郵箱驗證碼功能的實現。其實沒啥技術含量,就是可能邏輯上需要理清自己想要什么功能。
文章中如有錯誤,請留言指出,個人技術能力有限,希望可以幫到你。
轉載請注明來源!謝謝!!!