springboot邮箱注册

1.准备工作

操作之前准备两个邮箱

我准备了网易邮箱和QQ邮箱,网易邮箱用来发送验证码,QQ邮箱用来做注册(希望大家和我一样,不然可能会出错                  )

发送验证码的邮箱需要开启一些设置,否则不能发送验证码

网易免费邮箱 - 你的专业电子邮局

网易邮箱官网,没有的注册一个,有的直接输入账号密码登录,

1.登录后点击设置

2.继续操作

3.保证两个服务开启:

IMAP/SMTP服务:
POP3/SMTP服务:

 4.生成授权码(授权码要保存起来,只能查看一次,)

 将生成的授权码放入properties配置文件 (稍后会用)

server.port=8081
restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar
spring.mvc.static-path-pattern=/static/**
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.cache=false
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.stat-view-servlet.allow=true
mybatis.type-aliases-package=com.dss.springboot.entity
mybatis.mapper-locations=classpath:mapper/**/*.xml
spring.mail.default-encoding=utf-8
spring.mail.host=smtp.163.com
spring.mail.username=15543326163@163.com
spring.mail.password=
spring.mail.protocol=smtp
spring.mail.port=25







       根据配置文件修改成自己的数据库和密码

发送消息的账号添加到

spring.mail.username=xxxxxx@163.com

 其他设计默认即可

4.创建数据库

 

 5.新建数据库

 

6.用户表语句:

user表 数据库建表语句:

create table user
(
    uid      int auto_increment
        primary key,
    username varchar(255) not null,
    password varchar(255) not null,
    nickname varchar(255) null,
    email    varchar(255) not null,
    state    int          not null,
    code     varchar(255) null
);

在控制台执行

 

2.开始搭建:

 

选择有项目 sdk 8+java8 没有的随便选等创建 项目完成在修改

 将文件复制到properties

1.properties
server.port=8081
restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar
spring.mvc.static-path-pattern=/static/**
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.cache=false
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20

spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.stat-view-servlet.allow=true
mybatis.type-aliases-package=com.dss.springboot.entity
mybatis.mapper-locations=classpath:mapper/**/*.xml
spring.mail.default-encoding=utf-8
spring.mail.host=smtp.163.com
spring.mail.username=15543326163@163.com
spring.mail.password=你邮箱生成的授权码 
spring.mail.protocol=smtp
spring.mail.port=25


 
2. pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dss</groupId>
    <artifactId>springboot--javaMail</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>emailtest</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 引入 thymeleaf 模板依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- 引入数据源依赖,这里使用alibaba的druid数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.0</version>
        </dependency>
        <!-- mysql的连接依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
        <!--mybatis相关依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

        <!-- 支持发送邮件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
3.连接数据库

 

 

4.修改文件设置,

5. 启动项目(检验配置是否成功)

 

6. 配置注册页面
 

 

 resource目录下templates 下 新建 thymeleaf 文件夹 新建页面

register.html
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title></title>
</head>
<body>

<form action="/user/register" method="post">
	用户名:<input type="text" name="username" id="username"/><br/>
	密码:<input type="password" name="password" id="password"/><br/>
	确认密码:<input type="password" name="password1" id="password1"/><br/>
	昵称:<input type="text" name="nickname" id="nickname"/><br/>
	邮箱:<input type="text" name="email" id="email"/><br/>
	<input type="submit" value="注册"/>
</form>

</body>
</html>
result.html

 

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title></title>
</head>
<body>

<h1 th:text="${message}"></h1>

</body>
</html>
7. 用mybatisx

生成 实体类 mapper 层 service 层 imp层   mapper.xml

 

 

 

 

 

 

 

 

 

 整理后项目结够如下

 

 

 

 8.添加工具类
package com.dss.javaMail.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

/**
 * 发送邮件的工具类
 * @author duan ss
 *
 */
@Component
public class MailUtil {

	@Autowired
	private JavaMailSender javaMailSender;

	/**
	 * 发送邮件
	 * @param toUser	收件人
	 * @param code		激活码
	 * @return
	 */
	public String send(String toUser, String code) {

		// 建立邮件消息
		SimpleMailMessage mainMessage = new SimpleMailMessage();

		// 发送者
		mainMessage.setFrom("15543326163@163.com");

		// 接收者
		mainMessage.setTo(toUser);

		// 发送的标题
		mainMessage.setSubject("注册激活邮件");

		// 发送的内容
		mainMessage.setText("<h1>来自xxx网站的注册激活邮件,激活请点击以下链接:http://localhost:8081/user/regActive?code="+code+"");

		javaMailSender.send(mainMessage);

		return "success";
	}

}
 9.编写各层代码
 mapper层

 

package com.example.emailtest.mapper;

import com.example.emailtest.domain.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
* @author l
* @description 针对表【user】的数据库操作Mapper
* @createDate 2024-02-23 12:49:21
* @Entity com.example.emailtest.domain.User
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {
    void registerUser(User user);

    User getUserByCode(User user);

    void updateState(User user);

    User getUserByUsernameAndPassword(String username, String password);
}




       

service层
package com.example.emailtest.service;

import com.example.emailtest.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;

/**
* @author l
* @description 针对表【user】的数据库操作Service
* @createDate 2024-02-23 12:49:21
*/
public interface UserService extends IService<User> {

    void registerUser(User user);

    User getUserByCode(User user);

    void updateState(User user);


    User getUserByUsernameAndPassword(String username, String password);
}
serviceimpl层
package com.example.emailtest.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.emailtest.domain.User;
import com.example.emailtest.service.UserService;
import com.example.emailtest.mapper.UserMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
* @author l
* @description 针对表【user】的数据库操作Service实现
* @createDate 2024-02-23 12:49:21
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
    implements UserService {
    @Resource
    private UserMapper userMapper;

    @Override
    public void registerUser(User user) {
        userMapper.registerUser(user);
    }

    @Override
    public User getUserByCode(User user) {
        return userMapper.getUserByCode(user);
    }

    @Override
    public void updateState(User user) {
        userMapper.updateState(user);
    }

    @Override
    public User getUserByUsernameAndPassword(String username, String password) {
        return userMapper.getUserByUsernameAndPassword(username, password);
    }
}




mapper.xml层
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.emailtest.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="com.example.emailtest.domain.User">
            <id property="uid" column="uid" jdbcType="INTEGER"/>
            <result property="username" column="username" jdbcType="VARCHAR"/>
            <result property="password" column="password" jdbcType="VARCHAR"/>
            <result property="nickname" column="nickname" jdbcType="VARCHAR"/>
            <result property="email" column="email" jdbcType="VARCHAR"/>
            <result property="state" column="state" jdbcType="INTEGER"/>
            <result property="code" column="code" jdbcType="VARCHAR"/>
    </resultMap>

    <sql id="Base_Column_List">
        uid,username,password,
        nickname,email,state,
        code
    </sql>
    <insert id="registerUser" parameterType="com.example.emailtest.domain.User">
        insert into user values(#{ uid}, #{username}, #{password}, #{nickname}, #{email}, #{state}, #{code})
    </insert>
    <update id="updateState">
        update user set state = 1 where uid = #{uid} and code = #{code}
    </update>
    <select id="getUserByCode" resultType="com.example.emailtest.domain.User">
        select * from user where code = #{code}
    </select>
    <select id="getUserByUsernameAndPassword" resultType="com.example.emailtest.domain.User">
select * from user where username = #{username} and password = #{password}
    </select>
</mapper>

controller层
package com.example.emailtest.controller;

import com.example.emailtest.domain.User;
import com.example.emailtest.mapper.UserMapper;
import com.example.emailtest.service.UserService;
import com.example.emailtest.utils.MailUtil;
import com.example.emailtest.utils.UuidUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;




import javax.annotation.Resource;

@Controller
@RequestMapping(value = "/user")
public class UserController {

	@Resource
	UserMapper userMapper;
	@Autowired
	private UserService userService;

	@Autowired
	private MailUtil mailUtil;

	@RequestMapping(value = "/goReg")
	public String getUser() {

		return "thymeleaf/register";

	}

	@RequestMapping(value = "/register")
	@ResponseBody
	public String register(User user) {

		user.setState(0);		//	0表示未激活/1表示激活
		user.setCode(UuidUtil.get32UUID());

		String result = mailUtil.send(user.getEmail(), user.getCode());

		System.out.println("发送邮件结果: " + result);

		System.out.println(user);

		userService.registerUser(user);

		return "success";
	}

	@RequestMapping(value = "/regActive")
	public String regActive(@RequestParam("code") String code,ModelMap map) {

		User user = new User();
		user.setCode(code);

		user = userService.getUserByCode(user);

		if(user != null) {

			if(user.getState() == 1) {

				map.addAttribute("message", "你已经激活过了...");

			}else {
				userService.updateState(user);
				map.addAttribute("message", "激活成功...");
			}

		}else {

			map.addAttribute("message", "激活失败...");
		}


		return "thymeleaf/result";
	}




}

启动类加mappscan注解!!!!!!!!!!!!!!!
package com.example.emailtest;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.example.emailtest.mapper")
@SpringBootApplication
public class EmailtestApplication {

    public static void main(String[] args) {
        SpringApplication.run(EmailtestApplication.class, args);
    }

}

3.启动项目:

注册接口地址

http://localhost:8081/user/goReg

邮件会收到消息

输入激活码

 数据库如下:

激活的账号state为1

 

4.todo 正在准备邮箱登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/406099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg解析之avformat_find_stream_info函数

avformat_find_stream_info 的主要作用就是&#xff1a;解析媒体文件并获取相关的流信息 整体的逻辑如下图所示&#xff1a; /*** Read packets of a media file to get stream information. This* is useful for file formats with no headers such as MPEG. This* function…

【Java程序设计】【C00276】基于Springboot的就业信息管理系统(有论文)

基于Springboot的就业信息管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的就业信息管理系统 本系统分为前台功能模块、管理员功能模块、学生功能模块、企业功能模块以及导师功能模块。 前台功能模块&…

第十四章[面向对象]:14.8:枚举类

一,定义枚举类 1,把一个类定义为枚举类: 只需要让它继承自 enum 模块中的 Enum 类即可。 例如在下面的例子中,Weekday 类继承自 Enum 类, 则表明这是一个枚举类 枚举类的每个成员都由 2 部分组成,分别是 name 和 value, 其中 name 属性值为该枚举值的变量名(如下例中: …

SwiftUI 支持拖放功能的集合视图(Grid)如何捕获手指按下并抬起这一操作

功能需求 假设我们开发了一款 SwiftUI 应用,其中用户可以通过拖放 Grid 中的 Cell 来完成一些操作。现在,我们希望用户在某个 Cell 被按下并随后抬起手指时得到通知,这能够实现吗? 如上图所示,我们准确地捕获到了手指在 Grid 的 Cell 上按下再抬起这一操作!那么它是如何…

电子元件分销商

Top 10 Active Electronic Parts Distributors List – 2022 / 2023 一家从众多制造商那里收购所有电子元件并销售给客户的公司被称为电子元件分销商。 A company that acquires all electronic components from numerous manufacturers and sells them to customers from a si…

如何做bug分析 ?bug分析什么 ? 为什么要做bug分析 ?

每当我们完成一个版本测试时&#xff0c;总会在测试报告中添加一些分析bug的指标 &#xff0c;主要用于分析在测试过程中存在的问题 。但是在分析的过程中你就可能遇到如下的问题 &#xff1a; 我应该分析那些指标呢 &#xff1f;每一个具体的指标该如何分析 &#xff1f;它能说…

使用Python制作进度条有多少种方法?看这一篇文章就够了!

前言 偶然间刷到一个视频&#xff0c;说到&#xff1a;当程序正在运算时&#xff0c;会有一个较长时间的空白期&#xff0c;谁也不知道程序运行的进度如何&#xff0c;不如给他加个进度条。 于是我今个就搜寻一下&#xff0c;Python版的进度条都可以怎么写&#xff01; 正文…

【Logback】Logback 日志框架的架构

目录 1、Logger&#xff08;记录器&#xff09; &#xff08;1&#xff09;有效级别和级别继承 &#xff08;2&#xff09;日志打印和日志筛选 &#xff08;3&#xff09;记录器命名 2、Appenders&#xff08;追加器&#xff09; 3、Layouts&#xff08;布局&#xff09;…

【深度学习】LoRA: Low-Rank Adaptation of Large Language Models,论文解读

文章&#xff1a; https://arxiv.org/abs/2106.09685 文章目录 摘要介绍LoRA的特点什么是低秩适应矩阵&#xff1f;什么是适应阶段&#xff1f;低秩适应矩阵被注入到预训练模型的每一层Transformer结构中&#xff0c;这一步是如何做到的&#xff1f; 摘要 自然语言处理的一个重…

Docusaurus框架——快速搭建markdown文档站点介绍sora

文章目录 ⭐前言⭐初始化项目&#x1f496; 创建项目&#xff08;react-js&#xff09;&#x1f496; 运行项目&#x1f496; 目录文件&#x1f496; 创建一个jsx页面&#x1f496; 创建一个md文档&#x1f496; 创建一个介绍sora的文档 ⭐总结⭐结束 ⭐前言 大家好&#xff0…

变分自编码器 VAE 超详解,从简单公式推导到模型结构到模型理解

参考文献&#xff1a; [1] Kingma D P, Welling M. Auto-encoding variational bayes[J]. arXiv preprint arXiv:1312.6114, 2013. [2] Doersch C. Tutorial on variational autoencoders[J]. arXiv preprint arXiv:1606.05908, 2016. [3] 变分自编码器&#xff08;一&#xff…

nginx-------- 高性能的 Web服务端 (三) 验证模块 页面配置

一、http设置 1.1 验证模块 需要输入用户名和密码 htpasswd 此命令来自于 httpd-tools 包&#xff0c;如果没有安装 安装一下即可 也可以安装httpd 直接yum install httpd -y 也一样 第一次生成文件htpasswd -c 文件路径 姓名 交互式生成密码 htpasswd -bc 文…

【牛牛送书 | 第四期】《高效使用Redis:一书学透数据存储与高可用集群》带你快速学习使用Redis

前言&#xff1a; 当今互联网技术日新月异&#xff0c;随着数据量的爆炸式增长&#xff0c;如何高效地存储和管理数据成为了每个公司都必须面对的挑战。与此同时&#xff0c;用户对于应用程序的响应速度和稳定性要求也越来越高。在这个背景下&#xff0c;Redis 作为一个…

证件照(兼容H5,APP,小程序)

证件照由uniappuyui开发完成&#xff0c;并同时兼容H5、App、微信小程序、支付宝小程序&#xff0c;其他端暂未测试。 先看部分效果图吧具体可以下方复制链接体验demo 首页代码 <template><view class""><view class"uy-m-x-30 uy-m-b-20"…

TYPE-C接口桌面显示器:视频与充电的双重革新

在现代科技的浪潮中&#xff0c;TYPE-C接口桌面显示器崭露头角&#xff0c;它不仅仅是一台显示器&#xff0c;更是充电与视频传输的完美融合。这种新型的显示器&#xff0c;凭借其TYPE-C接口&#xff0c;实现了从DC电源到PD协议充电的华丽转身&#xff0c;为众多设备如笔记本电…

实用区块链应用:去中心化投票系统的部署与实施

一、需求分析背景 随着技术的发展&#xff0c;传统的投票系统面临着越来越多的挑战&#xff0c;如中心化控制、透明度不足和易受攻击等问题。为了解决这些问题&#xff0c;我们可以利用区块链技术去中心化、透明性和安全性来构建一个去中心化投票系统。这样的系统能够确保投票过…

opencv直方图绘制详解

文章目录 1.直方图的定义、意义和特征1. 定义2. 意义3. 特征4. 方法和参数 2.灰度直方图3.mask详解4.彩色直方图 1.直方图的定义、意义和特征 1. 定义 在统计学中&#xff0c;直方图是一种对数据分布情况的图形表示&#xff0c;是一种二维统计图表&#xff0c; 他的两个坐标分…

HTML+CSS:动态搜索框

效果演示 这段代码实现了一个简单的搜索栏效果。页面背景为从天蓝色到深蓝色的渐变色&#xff0c;搜索栏包括一个圆形背景的搜索图标和一个输入框。当用户点击搜索图标时&#xff0c;输入框会从搜索图标的位置滑出&#xff0c;显示一个输入框和一个清除按钮。用户可以在输入框中…

MySQL数据库基础(十三):关系型数据库三范式介绍

文章目录 关系型数据库三范式介绍 一、什么是三范式 二、数据冗余 三、范式的划分 四、一范式 五、二范式 六、三范式 七、总结 关系型数据库三范式介绍 一、什么是三范式 设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&…

JavaSec 之 XXE 简单了解

文章目录 XMLReaderSAXReaderSAXBuilderDocumentBuilderUnmarshaller**SAXParserFactory**XMLReaderFactoryDigester总结 XMLReader public String XMLReader(RequestBody String content) {try {XMLReader xmlReader XMLReaderFactory.createXMLReader();// 修复&#xff1a…