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_incrementprimary 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=20spring.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 {@Autowiredprivate 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 {@Resourceprivate UserMapper userMapper;@Overridepublic void registerUser(User user) {userMapper.registerUser(user);}@Overridepublic User getUserByCode(User user) {return userMapper.getUserByCode(user);}@Overridepublic void updateState(User user) {userMapper.updateState(user);}@Overridepublic User getUserByUsernameAndPassword(String username, String password) {return userMapper.getUserByUsernameAndPassword(username, password);}
}

mapper.xml层
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//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 {@ResourceUserMapper userMapper;@Autowiredprivate UserService userService;@Autowiredprivate MailUtil mailUtil;@RequestMapping(value = "/goReg")public String getUser() {return "thymeleaf/register";}@RequestMapping(value = "/register")@ResponseBodypublic 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 正在准备邮箱登录

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SORA技术报告

文档链接&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

C# If与Switch的区别

在 switch 语句中使用表达式比较时&#xff0c;编译器会生成一个查找表&#xff0c;其中包含所有表达式的值和对应的 case 标签。因此&#xff0c;与使用常量或字面量比较相比&#xff0c;使用表达式比较可能会略微降低性能。 只有当 switch 语句中的所有 case 标签都使用常量或…

Web 前端 UI 框架Bootstrap简介与基本使用

Bootstrap 是一个流行的前端 UI 框架&#xff0c;用于快速开发响应式和移动设备优先的网页。它由 Twitter 的设计师和工程师开发&#xff0c;现在由一群志愿者维护。Bootstrap 提供了一套丰富的 HTML、CSS 和 JavaScript 组件&#xff0c;可以帮助开发者轻松地构建和定制网页和…

【Qt学习】QRadioButton 的介绍与使用(性别选择、模拟点餐)

文章目录 介绍实例使用实例1&#xff08;性别选择 - 单选 隐藏&#xff09;实例2&#xff08;模拟点餐&#xff0c;多组单选&#xff09; 相关资源文件 介绍 这里简单对QRadioButton类 进行介绍&#xff1a; QRadioButton 继承自 QAbstractButton &#xff0c;用于创建单选按…

HTTP攻击,该怎么防护

一般网络世界里为人们所熟知的DDoS攻击&#xff0c;多数是通过对带宽或网络计算资源的持续、大量消耗&#xff0c;最终导致目标网络与业务的瘫痪&#xff1b;这类DDOS攻击&#xff0c;工作在OSI模型的网络层与传输层&#xff0c;利用协议特点构造恶意的请求载荷来达成目标资源耗…

2024年【起重机司机(限桥式起重机)】考试报名及起重机司机(限桥式起重机)证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机司机(限桥式起重机)考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新起重机司机(限桥式起重机)证考试题目及答案&#xff01;多做几遍&#xff0c;其实通过起重机司机(限桥式起重机)作业考试题库…

修复Microsoft Edge WebView2无法安装的问题

修复Microsoft Edge WebView2无法安装的问题 场景解决方案 场景 系统&#xff1a;win11 电脑&#xff1a;联想14 前提&#xff1a;使用Geek Uninstaller强制删除了Microsoft Edge WebView2 同时下载了clash verge。 发现根本无法运行&#xff08;点击了无任何反应且图标颜色…

【深度学习笔记】3_6 代码实现softmax-regression

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.6 softmax回归的从零开始实现 这一节我们来动手实现softmax回归。首先导入本节实现所需的包或模块。 import torch import torchvision import numpy as np import…

QT Widget自定义菜单

此文以设置QListWidget的自定义菜单为例&#xff0c;其他继承于QWidget的类也都可以按类似的方法去实现。 1、ui文件设置contextMenuPolicy属性为CustomContextMenu 2、添加槽函数 /*** brief onCustomContextMenuRequested 右键弹出菜单* param pos 右键的坐标*/void onCusto…

十一、Qt数据库操作

一、Sql介绍 Qt Sql模块包含多个类&#xff0c;实现数据库的连接&#xff0c;Sql语句的执行&#xff0c;数据获取与界面显示&#xff0c;数据与界面直接使用Model/View结构。1、使用Sql模块 &#xff08;1&#xff09;工程加入 QT sql&#xff08;2&#xff09;添加头文件 …

2023年的AI模型学习/部署/优化

可以的话&#xff0c;github上给点一个小心心&#xff0c;感谢观看。 LDC边缘检测的轻量级密集卷积神经网络&#xff1a; meiqisheng/LDC (github.com)https://github.com/meiqisheng/LDC segment-anything分割一切的图像分割算法模型&#xff1a; meiqisheng/segment-anyt…

群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决

宝塔的安装就不在这赘述了&#xff0c;只说下&#xff0c;启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码&#xff0c;无法登陆 然后点忘记密码&#xff0c;由于是docker安装的&#xff0c;根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…

【Java程序设计】【C00283】基于Springboot的校园志愿者管理系统(有论文)

基于Springboot的校园志愿者管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园志愿者管理系统 本系统分为系统功能模块、管理员功能模块以及志愿者功能模块。 系统功能模块&#xff1a;用户进入到系统…

应用中如何将单数据库升级为集群【数据库集群】【MySQL集群模式】

MySQL集群架构搭建以及多数据源管理实战 应用中如何将单数据库升级为集群1、搭建MySQL集群&#xff0c;实现服务和数据的高可用1>搭建基础MySQL服务。​ 2、启动MySQL服务​ 3、连接MySQL 2>搭建MySQL主从集群1》配置master服务2》配置slave从服务3》主从集群测试4》全库…

Github 2024-02-23 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-23统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量非开发语言项目4Python项目3TypeScript项目1HTML项目1Dart项目1Rust项目1 从零开始构建你喜爱的技术 创建周…

智胜未来,新时代IT技术人风口攻略-第七版(弃稿)

文章目录 前言鸿蒙生态科普调研人员画像角色先行结论 - 市场下的增量蛋糕高校助力鸿蒙 - 掀起鸿蒙教育热潮高校鸿蒙课程开设占比 - 巨大需求背后是矛盾冲突教研力量并非唯一原因 - 看重教学成果复用与效率 企业布局规划 - 多元市场前瞻视野全盘接纳仍需一段时间 - 积极正向的一…

【新手易错点】golang中byte和rune

1 总体区别 在Golang中&#xff0c;byte和rune是两种不同类型的数据。简单来说&#xff0c;byte是一个8位的无符号整数类型&#xff0c;而rune则是一个32位的Unicode字符类型。 Byte: 在Golang中&#xff0c;byte类型实际上是uint8的别名&#xff0c;它用来表示8位的无符号整…

2.22日学习打卡----正则表达式

2.22日学习打卡 目录&#xff1a; 2.22日学习打卡正则表达式什么是正则表达式&#xff1f;正则表达式的作用正则表达式特点基础语法表格元字符Java 中正则表达式的使用正则表达式语法规则内容限定单个字符限定范围字符限定取反限定 长度限定长度限定符号预定义字符正则表达式的…

【MySQL】MySQL从0到0.9 - 持续更新ing

MySQL SQL 基础 DDL 语句 show databases; show tables; desc table_name; # 获取表信息 show create table 表名; // 查询指定表的建表语句 数据类型 char(10) 不满10个会用空格填充&#xff0c;性能好一点 varchar(10) 变长字符串&#xff0c;性能差一点 CREATE TABLE tabl…

力扣 187. 重复的DNA序列

1.题目 DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止一…