个人商城系统开源(发送邮箱验证码!)

这篇具有很好参考价值的文章主要介绍了个人商城系统开源(发送邮箱验证码!)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文地址:个人商城系统开源(发送邮箱验证码!) - Pleasure的博客

下面是正文内容:

前言

由于近期实在没有什么话题可写和一些有趣的项目教程可以分享。所以我只能决定将我自己亲手编写的一个迷你迷你商城系统进行开源。

也就是放在我博客右边的“我的另一个网站”(由于实在没什么生意只能开源了,充当教材)

开始分享一些前后端全栈的内容,希望对你们有所帮助。

虽然是迷你的商城系统,但是由于要实现每一部分各自的功能还是非常复杂的,比如用户的注册登录,手机号邮箱的绑定,充值支付功能的实现等等。

所以在这里我会花一周的时间按照功能进行划分来逐块解释,也好水一周的文章。顺便可以迁个站,整理一下代码。

看之前还是麻烦大家点点关注,谢谢!(就不选仅粉丝可见了)

如果在实现上存在什么问题,可以联系我。

正文

在开始之前需要说明的是,由于在注册账号的过程中需要绑定用户的邮箱,以便后续账号密码的找回,所以今天商城系统的开源就优先从绑定邮箱开始。

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

预备知识

三个电子邮箱协议

  • SMTP(Simple Mail Transfer Protocol): 用于发送电子邮件的协议。
  • POP3(Post Office Protocol version 3): 用于从邮件服务器下载电子邮件到本地设备的协议。
  • IMAP(Internet Message Access Protocol): 允许用户在多个设备上同步和管理邮件的协议。

预先的准备

一个域名,解析域名的账号,腾讯企业邮的账号(当然其他邮件公司也可以)

首先需要建立一个发送邮件验证码的邮箱账号,也就是针对自己的域名进行邮箱解析。

同时根据这个原理,你可以同时创建多个邮箱账号——用于一些不常用账号的注册以及广告邮件的接收。

当然也可以参考官方的使用说明!常用邮件客户端软件POP/IMAP协议设置-帮助中心-企业微信

在域名解析栏中添加下面的几个解析(或者点击快速解析常用邮箱解析)

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

登录腾讯企业邮箱官网(需要有企业微信账号),找到下面的这个界面,添加域名

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

添加邮箱账号

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

登录邮箱账号进行设置

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

记录下面的密钥,后面在发送邮箱验证码的时候需要用到(调用的凭证)

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

至此前置工作就算结束了

然后就是下载给出的这个调用包:https://github.com/PHPMailer/PHPMailer (相当于一个插件)

当然在商城系统的开源压缩包中也有配备,大家自行选择。

正式调用

下面就是调用邮箱发送验证码的关键代码,其中password处填写的就是上面生成的密码。

function generateRandomCode()函数用于生成六位随机验证码,并储存session用于后面在emailcheck.php中进行验证,验证完毕后通过emailaction.php在数据库中进行储存。

emailregister.php就是前段的页面,下面是emailregister.php的内容。

个人商城系统开源(发送邮箱验证码!),迷你商城系统开源,开源,前端,后端,php

<?php
session_start();
$email = isset($_SESSION['email']) ? $_SESSION['email'] : '';
$token = isset($_SESSION['token']) ? $_SESSION['token'] : '';
if (isset($_SESSION['username'])) { ?>
    <!DOCTYPE html>
    <html>

    <head>
        <title>邮箱注册或更新</title>
        <meta name="content-type" ; charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta name="description" content="">
        <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
        <meta name="generator" content="Jekyll v4.0.1">
        <link rel="icon" href="../picture/avatar2.jpg" type="image">
        <link href="../bootstrap.css" rel="stylesheet">
        <link href="../loginsystem/signin.css" rel="stylesheet">
        <style>
            .bd-placeholder-img {
                font-size: 1.125rem;
                text-anchor: middle;
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
            }

            @media (min-width: 768px) {
                .bd-placeholder-img-lg {
                    font-size: 3.5rem;
                }
            }
        </style>
    </head>

    <body class="text-center">
        <div class="form-signin" id="loginform">
            <img class="mb-4" src="../picture/avatar2.jpg" alt="" width="72" height="72">
            <h1 class="h3 mb-3 font-weight-normal">Please register/change here</h1><br>

            <form class="form-signin" id="loginform" action="./email.php" method="post">
                <div style="display: flex; align-items: center;">
                    <input type="email" id="email" class="form-control" name="email" required="required" value="<?php echo $email ?>" placeholder="Email" required autofocus>
                    <button class="btn btn-md btn-secondary" id="buttonefirst" type="submit" name="send">Send</button>
                </div>
            </form>
            <p>
                <?php
                $err = isset($_GET["err"]) ? $_GET["err"] : "";
                switch ($err) {
                    case 1:
                        echo "<br>发送成功!";
                        break;

                    case 2:
                        echo "<br>发送失败!";
                        break;

                    case 13:
                        echo "<br>该邮箱已被注册!";
                        break;
                }
                ?>
            </p>
            <form class="form-signin" id="loginform" action="./emailcheck.php" method="post">
                <div style="display: flex; align-items: center;">
                    <input type="text" id="verification1" class="form-control" name="verification1" required="required" value="" placeholder="Email Verification Code" required autofocus>
                    <button class="btn btn-md btn-secondary" id="buttonfirst" type="submit" name="send">Sure</button>
                </div>
            </form>
            <p>
                <?php
                $err = isset($_GET["err"]) ? $_GET["err"] : "";
                switch ($err) {
                    case 3:
                        echo "<br>验证成功!";
                        break;

                    case 4:
                        echo "<br>邮箱更新成功!";
                        header('Refresh: 3; URL=../index.php');
                        exit();
                        break;

                    case 5:
                        echo "<br>验证失败!";
                        break;

                    case 6:
                        echo "<br>验证成功!请返回登录界面登录!";
                        header('Refresh: 3; URL=../index1.html');
                        exit();
                        break;
                }
                ?>
            </p>
        </div>
    </body>

    </html>
<?php
} else {
    header('Location: ../index1.html');
    exit;
}
?>

下面是email的内容

<?php

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

require '../PHPMailer-6.9.1/src/Exception.php';
require '../PHPMailer-6.9.1/src/PHPMailer.php';
require '../PHPMailer-6.9.1/src/SMTP.php';

function generateRandomCode()
{
    $code = '';
    for ($i = 0; $i < 6; $i++) {
        $code .= mt_rand(0, 9);
    }
    return $code;
}

$randomCode = generateRandomCode();

if (isset($_POST['send'])) {
    $mail = new PHPMailer(true);

    $mail->isSMTP();
    $mail->Host = 'smtp.exmail.qq.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'pleasure@yiming1234.com';
    $mail->Password = '*******************';
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;

    $mail->setFrom('pleasure@yiming1234.com');

    $mail->addAddress($_POST["email"]);

    $mail->isHTML(true);

    $mail->Subject = "Verification Code";
    $mail->Body = "感谢您光临一鸣的小站,请在5分钟内使用验证码,祝您生活愉快。您的验证码是:$randomCode ";



    ini_set('session.cookie_lifetime', 300);
    session_start();
    $_SESSION['email_code'] = $randomCode;
    $_SESSION['email'] = $_POST["email"];
    $username = $_SESSION['username'];
    $email = $_POST["email"];
    $token = $_SESSION['token'];

    require "../conn.php";
    $stmt = $conn->prepare("SELECT email FROM email WHERE email = ? AND username != ?");
    $stmt->bind_param("ss", $email, $username);
    $stmt->execute();
    $res1 = $stmt->get_result();
    $email2 = $res1->fetch_assoc();

    if ($email2['email'] == $_POST['email']) {
        header("Location:emailregister.php?err=13");
        exit;
    }
    if ($mail->send()) {
        header("Location:emailregister.php?err=1");
    } else {
        header("Location:emailregister.php?err=2");
    }
}

下面是emailcheck.php的内容

<?php
session_start();

$userInputCode = $_POST['verification1'];
$generatedCode = $_SESSION['email_code']; 
$email = $_SESSION["email"];
$token = $_SESSION['token'];
// 进行验证

if ($userInputCode === $generatedCode) { 
   header("Location:emailaction.php");
   exit;
} else {
   header("Location:emailregister.php?err=5");
}
?>

下面是emailaction.php的内容

<?php
session_start();
$email = $_SESSION['email'];
$username = $_SESSION['username'];
$token = $_SESSION['token'];

require "../conn.php";
$stmt = $conn->prepare("SELECT email FROM email WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$ret = $stmt->get_result();
$num = $ret->num_rows;
if ($num < 1) { if (!empty($token)) { $stmt1 = $conn->prepare("UPDATE email SET email = ? WHERE username = ?");
$stmt1->bind_param("ss", $username, $email);
$stmt1->execute();
header("Location:emailregister.php?err=6");

} else {
    $stmt1 = $conn->prepare("INSERT INTO email (email, username) VALUES (?, ?)");
    $stmt1->bind_param("ss", $email, $username);
    $stmt1->execute();
    header("Location:emailregister.php?err=3");
}

} else {
$stmt2 = $conn->prepare("UPDATE email SET email = ? WHERE username = ?");
$stmt2->bind_param("ss", $username, $email);
$stmt2->execute();
header("Location:emailregister.php?err=4");
}

大家根据自己的理解自行解读

值得注意的事,并没有验证是否所有类型的邮箱都能接收到邮件(理论上应该是都可以的,如果不行可能是设置了垃圾邮件拦截等原因)。

尾声

在使用上并不能百分百保证没有报错,尤其是数据库连接部分,可能会存在一定问题。大家自行调试。

源码下载地址:

https://download.csdn.net/download/2302_79791164/88922823

即使不从发送邮箱验证码这个目的的角度来说,这个技能也还是蛮实用的。

希望对你们有所帮助。文章来源地址https://www.toymoban.com/news/detail-837328.html

到了这里,关于个人商城系统开源(发送邮箱验证码!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#基础:通过QQ邮件发送验证码到指定邮箱

    申请授权码: 第一步,登录QQ邮箱,点击设置-账号-找到下图位置点击开启服务 第二步,按照步骤指引,发送短信 第三步,记住授权码(后续无法查看授权码,但是可以生成多个授权码,不该邮箱密码不会过期)

    2024年01月16日
    浏览(40)
  • vue 前端 邮箱、密码、手机号码等输入验证规则

    最近在写前端表单验证的时候,发现一篇文章质量很好,所以写下这篇文章记录 原文章链接:vue 邮箱、密码、手机号码等输入验证规则 全局验证规则脚本,需要的地方引入即可: 给页面表单对象添加验证属性 :rules=“registerRules” ref=“registerForm” 为el-form-item每个表单子项添

    2024年02月15日
    浏览(40)
  • 前端(十七)——gitee上开源一个移动端礼盒商城项目(前端+后台)

    🤗博主:小猫娃来啦 🤗文章核心: gitee上开源一个移动端礼盒商城项目 项目样式老旧,ui设计较low,虽说现在大众的商城app都使用的是瀑布流布局,且功能更丰富。但本项目仅作为开源学习和技术交流,仅此而已。 前端采用搭建vue脚手架处理,使用JavaScript语言,后台采用

    2024年02月09日
    浏览(36)
  • 前端(十八)——gitee上开源一个移动端礼盒商城项目(前端+后台)

    🤗博主:小猫娃来啦 🤗文章核心: gitee上开源一个移动端礼盒商城项目 项目样式老旧,ui设计较low,虽说现在大众的商城app都使用的是瀑布流布局,且功能更丰富。但本项目仅作为开源学习和技术交流,仅此而已。 前端采用搭建vue脚手架处理,使用JavaScript语言,后台采用

    2024年02月08日
    浏览(39)
  • 使用node.js给前端发送一个图像验证码

    相信写过node的小伙伴都对此有相关了解 首先导入需要的包(//后有解释) const mysql = require(\\\"mysql\\\");   //用于创建和管理 MySQL 连接池。 const express = require(\\\"express\\\");//用于构建 Web 应用程序。 const app = express(); const interface = require(\\\"./interface\\\"); const bodyParser = require(\\\"body-parser\\\"); //用于

    2024年01月17日
    浏览(73)
  • html web前端,点击发送验证码,按钮60秒倒计时

    html web前端,点击发送验证码,按钮60秒倒计时 eaca39b57a49d39f6c9e2f49f2559e9a.jpg

    2024年02月08日
    浏览(44)
  • 社区团购商城小程序v18.1开源独立版+前端

    新增后台清理缓存功能 修复定位权限 修复无法删除手机端管理员 11月新登录接口修复! 修复商家付款到零钱, 修复会员登陆不显示头像, 修复无法修改会员开添加绑定

    2024年02月07日
    浏览(39)
  • 前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码

    前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下: 实现代码如下: 使用方法 HTML代码实现部分 组件实现代码

    2024年02月11日
    浏览(32)
  • 开源了一套基于springboot+vue+uniapp的商城,包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发

    开源了一套基于若依框架,SringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue+Uniapp的前后端分离的商城系统, 包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发。 前端采用Vue、Element UI(ant design 正在开发中)。 后端采用Spring Boot、Spring Security、Redis Jwt。 权限认证使用

    2024年02月12日
    浏览(32)
  • 【若依】框架搭建,前端向后端如何发送请求,验证码的实现,开启注册功能

    若依框架(Ruoyi)是一款基于Spring Boot和Spring Cloud的开源快速开发平台。它提供了一系列的基础功能和通用组件,能够帮助开发者快速构建企业级应用。若依框架采用了模块化的设计理念,用户可以选择需要的功能模块进行集成,也可以根据自己的业务需求进行扩展。若依框架

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包