龙空技术网

PHP使用PHPMailer发送验证码邮件的方法与调用逻辑

小轻论坛 172

前言:

如今你们对“企业邮箱验证码怎么搞”都比较注意,各位老铁们都想要了解一些“企业邮箱验证码怎么搞”的相关文章。那么小编同时在网络上汇集了一些有关“企业邮箱验证码怎么搞””的相关内容,希望小伙伴们能喜欢,姐妹们快快来了解一下吧!

首先我们需要下载PHPMailer:

一般情况下我们只需要压缩包中的src文件夹中的文件,并保存至根目录即可:

设置一个文件,如tomail.php:

<?phprequire 'PHPMailer/PHPMailer.php';require 'PHPMailer/SMTP.php';require 'PHPMailer/Exception.php';use PHPMailer\PHPMailer\PHPMailer;use PHPMailer\PHPMailer\SMTP;use PHPMailer\PHPMailer\Exception;require_once 'config.php';// 启动会话session_start();// 发送邮件function sendEmail($to, $subject, $body) {    $mail = new PHPMailer(true);    try {        // 配置SMTP服务器        $mail->isSMTP();        $mail->Host = ''; // 邮件服务器主机名        $mail->SMTPAuth = true;        $mail->Username = ''; // 邮件服务器用户名        $mail->Password = ''; // 邮件服务器密码        $mail->SMTPSecure = 'tls'; // 使用加密连接        $mail->Port = 587;        // 设置发件人和收件人        $mail->setFrom('', '');  // 设置发件人邮箱和名称        $mail->addAddress($to);  // 设置收件人邮箱        // 设置邮件内容        $mail->isHTML(true);        $mail->Subject = $subject;        $mail->Body = $body;        // 发送邮件        $mail->send();        return true;    } catch (Exception $e) {        return false;    }}// 获取页面传递的数据$email = $_POST['email'];  // 假设页面通过POST方式传递了email参数$action = $_POST['sendCaptcha'];  // 假设页面通过POST方式传递了sendCaptcha参数// 根据逻辑发送邮件或输出错误消息if ($action === 'reg' || $action === 'reset') {    // 检查邮箱是否已存在    $query = "SELECT * FROM users WHERE email = '$email'";    $result = mysqli_query($conn, $query);    if (mysqli_num_rows($result) > 0) {        if ($action === 'reg') {            echo '邮箱已存在';        } else {            $captcha = getCaptcha();            $subject = '密码重置验证码';            $body = '您的验证码是:' . $captcha;            if (sendEmail($email, $subject, $body)) {                echo '验证码已发送至您的邮箱';                $_SESSION['captcha'] = $captcha; // 将验证码保存到本地会话中            } else {                echo '发送邮件失败';            }        }    } else {        if ($action === 'reg') {            $captcha = getCaptcha();            $subject = '注册验证码';            $body = '您的验证码是:' . $captcha;            if (sendEmail($email, $subject, $body)) {                echo '验证码已发送至您的邮箱';                $_SESSION['captcha'] = $captcha; // 将验证码保存到本地会话中            } else {                echo '发送邮件失败';            }        } else {            echo '该邮箱未注册';        }    }}function getCaptcha() {    $length = 6; // 验证码长度    $charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; // 验证码字符集    $captcha = "";    for ($i = 0; $i < $length; $i++) {        $randomIndex = mt_rand(0, strlen($charset) - 1);        $captcha .= $charset[$randomIndex];    }    return $captcha;}?>

对于注册和修改密码,我在这个文件中设置了一个判断,能够检测到是哪个页面返回的数据,从而判断邮箱是否注册,注册了就可以修改密码,不能重新注册,进而发送验证码。

其中我们使用的是腾讯企业邮箱,腾讯企业邮箱不容易被封禁,具体注册步骤请搜索查看注册/开通腾讯企业邮箱流程,这里就不过多赘述。

在相应的注册和修改密码页面,我使用了一个同样的发送验证码的按钮:

<button type="button" name="sendCaptcha" class="btn btn-primary" onclick="CheckEmail()">发送验证码</button>

然后使用js事件调用这个tomail.php文件:

    var isSending = false; // 标记是否正在发送验证码    var countdown = 60; // 倒计时秒数    function sendEmail() {        // 如果正在发送验证码,则直接返回        if (isSending) {            return;        }        // 获取邮箱输入框的值        var email = document.getElementById('email').value;        // 创建一个新的表单数据对象        var formData = new FormData();        formData.append('email', email);        formData.append('sendCaptcha', 'reg/reset');        // 创建一个新的XMLHttpRequest对象        var xhr = new XMLHttpRequest();        // 配置POST请求        xhr.open('POST', 'tomail.php', true);        // 发送请求        xhr.send(formData);        // 处理响应        xhr.onreadystatechange = function() {            if (xhr.readyState === XMLHttpRequest.DONE) {                if (xhr.status === 200) {                    // 请求成功                    console.log(xhr.responseText);                    startCountdown(); // 开始倒计时                } else {                    // 请求失败                    console.log('请求失败');                }            }        };    }

需要注意的是,上面formData.append('sendCaptcha','reg/reset');中有一个reg和reset参数,这是为了传递给tomail.php识别的,如果是注册页面就用reg,如果是修改密码页面就用reset,自行修改即可。

这样你就能收到相应的验证码邮件了!

注册邮件

修改密码邮件

系统如何校验验证码的呢?

眼尖的人也发现了我在tomail.php中使用了用户会话的方式储存验证码:

// 启动会话session_start();$_SESSION['captcha'] = $captcha; // 将验证码保存到本地会话中

所以我们也需要在相应页面加载会话:

// 启动会话session_start();

我们首先要获取用户输入的验证码,并传递给后端:

$userCaptcha = $_POST['captcha']; // 用户输入的验证码

然后使用

 if ($_SESSION['captcha'] === $userCaptcha) {     //修改密码或者注册用户的相关逻辑 }

这样就能完美将邮件后端生成的验证码和用户输入的验证码进行校验了。

是不是很简单,赶紧试试吧!

最近我已经开发好了如何动态加载数据库中的发件人信息,也就是说,发件人的所有信息都可以保存到数据库,然后通过调用数据库进行加载,省去了修改代码的功夫。

如果你对网页开发感兴趣,可以关注我!

整理不易,还望支持!

标签: #企业邮箱验证码怎么搞