admin管理员组文章数量:1663646
文章目录
- 激活原理
- 运行说明(重点)
- 实例演示(重点)
- 代码说明
- 项目结构图
- 准备工作
- emailactivate项目详细代码
- common
- UUIDUtils
- config
- DruidDbConfig
- controller
- IndexController
- UserController
- dao
- UserDao
- entity
- User
- service
- UserService
- UserServiceImpl
- EmailService
- EmailServiceImpl
- EmailactivateApplication启动类
- resources
- mapper
- UserMapper.xml
- templates
- error
- 404.html
- 500.html
- index.html
- login.html
- success.html
- welcome.html
- application.properties
- pom.xml
你是否在某些网站注册账户,注册时输入的邮箱,会收到激活的一串链接,邮箱点击进去此链接后才能激活账户的情况呢,相信你应该也遇到过。那这个功能大概是怎么实现的呢?今天我就带你们来分析分析。
此功能是基于java开发的,用springboot所完成的。
激活原理
在您注册的时候,User类中设置一个邮件码code,同时用户状态未激活。邮件码可以通过UUID实现,这样在注册的时候发送一封邮件,把这个邮件码以html的格式发送到指定邮箱,然后通过点击链接,把邮件码在提交到后台进行对比,如果邮件中的邮件码跟发送时设置的一样,就把用户状态改为激活,然后登陆即可。
运行说明(重点)
由于邮箱在收到激活链接时,需要点击链接访问到线上的地址才可激活,如果是本地localhost运行的地址,点击邮箱激活链接会找不到地址哦,找不到地址则就无法激活当前账户登录的权限了,故此项目就失去了运行实例的意义。 一定要注意 一定要注意 一定要注意。重要的话说三遍!! 建议使用自己的服务器进行访问。
在此项目的测试演示中,使用的是Ngrok内网穿透所演示的,会把本地端口映射通过特定的网址进行访问
Ngrok 内网端口映射,在线访问项目一看即会.
另一篇博文链接 https://blog.csdn/qq_41157588/article/details/115755791
实例演示(重点)
注意:此demo使用的是qq邮箱的stmp进行发送的邮箱,项目中application.properties的配置需要更改为自己的qq邮箱stmp的服务(qq邮箱->设置->账户->翻到底部 开启IMAP/SMTP服务), 不懂的可百度搜索,开启后要在自己项目的application中配置自己的stmp服务邮箱及密码,如不使用qq的stmp服务可在百度搜索其他邮箱stmp开启方法,在项目的applicaion.properties根据注释 自行配置即可
如本地的localhost:8080链接访问,点击邮箱地址会访问不到本地,需要服务端地址,此处已做重点说明!!推荐配合 服务器 或 Ngrok内网穿透 的链接地址,点击邮箱链接会进行激活账户.
代码说明
此代码的演示是发送邮件至邮箱激活,点击邮箱链接后激活此账户 。 还存在一些bug。例如:用户名和邮箱已存在还可再次注册 发送邮件等,需要自己后期加入条件判断做进一步的优化,如账户已存在则给予提示等等
复制此项目代码重点修改application.properties的配置 和UserServiceImpl及 success.html 的链接地址
QQ邮箱为例,开启stmp服务
开启之后,复制生成的stmp的一串字符,配置到application.properties即可
接下来直奔主题
注册用户,输入邮箱
注册时,成功发送邮箱至邮箱激活的链接激活信息,点击邮箱链接后会激活此账号的登录权限。
注册时,数据库的也已经添加了新注册的用户信息
当不点击了邮箱的激活链接时,code的状态默认为0,此时账户为未激激活状态,不能进行登录。
当点击了邮箱的链接时,code的状态会改为1,此时账户为激活状态,可以进行登录账户
如已经成功激活,再次登录刚刚注册的账户,此时会登录成功跳转到登录成功后设置的页面。
项目结构图
准备工作
数据库
SQLyog Ultimate v12.3.1 (64 bit)
MySQL - 5.7.20-log
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
create table `useremail` (
`id` int (11),
`username` varchar (150),
`password` varchar (150),
`useremail` varchar (150),
`status` int (11),
`code` varchar (600)
);
insert into `useremail` (`id`, `username`, `password`, `useremail`, `status`, `code`) values('1','admin','123456','1136720013@qq','1','');
insert into `useremail` (`id`, `username`, `password`, `useremail`, `status`, `code`) values('2','aaa','aaaaaa','483444018@qq','0','c14dcdb9c63c4ad7980bda0beb1fcbe4e1f6ba7baa704966a6f9f2ac18acf075');
emailactivate项目详细代码
根据以上项目结构图由上而下提供代码
com.lemon.emailactivate
common
UUIDUtils
package com.lemon.emailactivatemon;
import java.util.UUID;
/**
* @Author: xiangti
* @Description:使用UUIDUtils生产发送给用户的邮箱验证码
* @Date: Create in 2020/5/29 18:32
*/
public class UUIDUtils {
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
}
config
DruidDbConfig
package com.lemon.emailactivate.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by lemon on 2020/5/29 18:32
* @author xiangti
* @CoonfigurationProperties(prefix="xxx")两种配置方法
*/
@Configuration
public class DruidDbConfig {
private Logger logger = LoggerFactory.getLogger(DruidDbConfig.class);
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DruidDataSource druidConfig() {
return new DruidDataSource();
}
}
controller
IndexController
package com.lemon.emailactivate.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @Author: xiangti
* @Description:
* @Date: Create in 2020/5/29 18:34
*/
@Controller
public class IndexController {
/**
* 首页
*/
@RequestMapping(value = "/")
public String index() {
return "index";
}
}
UserController
import com.lemon.emailactivatemon.UUIDUtils;
import com.lemon.emailactivate.entity.User;
import com.lemon.emailactivate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @Author: xiangti
* @Description:用户注册
* @Date: Create in 2020/5/29 18:37
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 注册
* @param user
* @return
*/
@RequestMapping("/registerUser")
public String register(User user) {
user.setStatus(0);
String code = UUIDUtils.getUUID() + UUIDUtils.getUUID();
user.setCode(code);
userService.register(user);
return "success";
}
/**
* 校验邮箱中的code激活账户
* 首先根据激活码code查询用户,之后再把状态修改为"1"
*/
@RequestMapping("/checkCode")
public String checkCode(String code) {
User user = userService.checkCode(code);
System.out.println(user);
//如果用户不等于null,把用户状态修改status=1
if (user != null) {
//已经点击邮箱链接 将状态改为1
user.setStatus(1);
//把code验证码清空,已经不需要了
user.setCode("");
System.out.println(user);
userService.updateUserStatus(user);
}
return "login";
}
/**
* 跳转到注册页面
* @return login
*/
@RequestMapping("/indexPage")
public String index() {
return "index";
}
/**
* 跳转到登录页面
* @return login
*/
@RequestMapping("/loginPage")
public String login() {
return "login";
}
/**
* 登录
*/
@RequestMapping("/loginUser")
public String login(User user, Model model) {
User u = userService.loginUser(user);
if (u != null) {
//登录成功 跳转到welcome欢迎页
return "welcome";
} else {
model.addAttribute("msg", "用户名或密码有误,请确认是否已激活!");
return "login";
}
}
}
dao
UserDao
import com.lemon.emailactivate.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
/**
* @Author: xiangti
* @Description:
* @Date: Create in 2020/5/29 18:31
*/
@Mapper
public interface UserDao {
/**
* 用户注册,注册的时候默认状态为0:未激活,并且调用邮件服务发送激活码到邮箱
*
* @param user
*/
void register(User user);
/**
* 点击邮箱中的激活码进行激活,根据激活码查询用户,之后再进行修改用户状态为1进行激活
*
* @param code
* @return
*/
User checkCode(String code);
/**
* 激活账户,修改用户状态为“1”进行激活
*
* @param user
*/
void updateUserStatus(User user);
/**
* 登录,根据用户状态为“1”来查询
*
* @param user
* @return
*/
User loginUser(User user);
/**
* 查出当前用户的状态
*
* @param status
* @return
*/
User selStatus(String status);
}
entity
User
package com.lemon.emailactivate.entity;
import java.io.Serializable;
/**
* @Author: xiangti
* @Description:
* @Date: Create in 2020/5/12 18:30
*/
public class User implements Serializable {
private Integer id;
private String username;
private String password;
private String useremail;
/**
* 状态:0代表未激活,1代表激活
*/
private Integer status;
/**
* 利用UUID生成一段数字,发动到用户邮箱,当用户点击链接时
* 在做一个校验如果用户传来的code跟我们发生的code一致,更改状态为“1”来激活用户
*/
private String code;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public String getUseremail() {
return useremail;
}
public void setUseremail(String useremail) {
this.useremail = useremail;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", useremail='" + useremail + '\'' +
", status=" + status +
", code='" + code + '\'' +
'}';
}
}
service
UserService
package com.lemon.emailactivate.service;
import com.lemon.emailactivate.entity.User;
/**
* @Author: xiangti
* @Description:
* @Date: Create in 2020/5/12/29 18:32
*/
public interface UserService {
/**
* 用户注册
*
* @param user
*/
void register(User user);
/**
* 根据激活码code查询用户,之后再进行修改状态
*
* @param code
* @return
*/
User checkCode(String code);
/**
* 激活账户,修改用户状态
*
* @param user
*/
void updateUserStatus(User user);
/**
* 登录,根据用户状态为“1”来查询
*
* @param user
* @return
*/
User loginUser(User user);
}
UserServiceImpl
package com.lemon.emailactivate.service.impl;
import com.lemon.emailactivate.dao.UserDao;
import com.lemon.emailactivate.entity.User;
import com.lemon.emailactivate.service.EmailService;
import com.lemon.emailactivate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
/**
* 注入邮件接口
*/
@Autowired
private EmailService mailService;
/**
* 用户注册,同时发送一封激活邮件
*
* @param user
*/
@Override
public void register(User user) {
userDao.register(user);
//获取激活码
String code = user.getCode();
System.out.println("code:" + code);
//主题
String subject = "来自激活用户认证的邮件";
//user/checkCode?code=code(激活码)是我们点击邮件链接之后根据激活码查询用户,如果存在说明一致,将用户状态修改为“1”激活
//上面的激活码发送到用户注册邮箱
//**************************************本地测试的路径 会失效。**************************************************************
//String context = "<a href=\"/user/checkCode?code="+code+"\">激活请点击:"+code+"</a>";
//String context = "<a href=\"http://localhost:8080/user/checkCode?code="+code+"\">激活请点击:"+code+"</a>";
//*************************************************************************************************************************
//user/checkCode?code=code(激活码)是我们点击邮件链接之后根据激活码查询用户,如果存在说明一致,将用户状态修改为“1”激活
//上面的激活码发送到用户注册邮箱
//注意:此处的链接地址,是项目内部地址,如果我们没有正式的服务器地址,暂时无法从qq邮箱中跳转到我们自己项目的激活页面
//方式1 注意看上述说明(如不服务器测试 把上面本地代码链接注释)
String context = "<a href=\"服务器端地址/user/checkCode?code=" + code + "\">激活用户认证请点击=> " + code + "</a>";
//方式2 注意看上述说明(如不服务器测试 把上面本地代码取消注释)
//String context = "<a href='服务端地址/user/checkCode?code='+code+'>激活用户认证请点击=> '+code+'</a>";
//发送激活邮件
mailService.sendHtmlMail(user.getUseremail(), subject, context);
}
/**
* 根据激活码code进行查询用户,之后再进行修改状态
*
* @param code
* @return
*/
@Override
public User checkCode(String code) {
return userDao.checkCode(code);
}
/**
* 激活账户,修改用户状态
*
* @param user
*/
@Override
public void updateUserStatus(User user) {
userDao.updateUserStatus(user);
}
/**
* 登录
*
* @param user
* @return
*/
@Override
public User loginUser(User user) {
User user1 = userDao.loginUser(user);
if (user1 != null) {
return user1;
}
return null;
}
}
EmailService
package com.lemon.emailactivate.service;
/**
* @Author: xiangti
* @Description:
* @Date: Create in 2020/5/12/29 18:32
*/
public interface EmailService {
/**
* 发送文本邮件,注册部分用不到
* @param to
* @param subject
* @param content
*/
//void sendSimpleMail(String to, String subject, String content);
/**
* 发送HTML邮件,方便用户点击附带的code用来验证激活账户
*
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
void sendHtmlMail(String to, String subject, String content);
}
EmailServiceImpl
package com.lemon.emailactivate.service.impl;
import com.lemon.emailactivate.service.EmailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
/**
* @Author: xiangti
* @Description:
* @Date: Create in 2020/5/12/ 18:20
*/
@Service
public class EmailServiceImpl implements EmailService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender mailSender;
/**
* 配置文件中我的qq邮箱
*/
@Value("${spring.mail.from}")
private String from;
/**
* 发送HTML邮件
*
* @param to 收件者
* @param subject 邮件主题
* @param content 文本内容
*/
@Override
public void sendHtmlMail(String to, String subject, String content) {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
try {
helper = new MimeMessageHelper(message, true);
//邮件发送人
helper.setFrom(from);
//邮件主题
helper.setSubject(subject);
//邮件接收人
helper.setTo(to);
//邮件内容
helper.setText(content, true);
//发送邮件
mailSender.send(message);
//日志信息
logger.info("邮件已经发送。");
} catch (MessagingException e) {
logger.error("发送邮件时发生异常!", e);
}
}
}
EmailactivateApplication启动类
package com.lemon.emailactivate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//@MapperScan("com.lemon.emailactivate.dao") //等同于 dao接口的@Mapper注解
public class EmailactivateApplication {
public static void main(String[] args) {
SpringApplication.run(EmailactivateApplication.class, args);
}
}
resources
mapper
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis//DTD Mapper 3.0//EN" "http://mybatis/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.lemon.emailactivate.dao.UserDao">
<!--注册用户-->
<insert id="register" parameterType="User">
insert into useremail ( username, password,useremail,status,code)
values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{useremail,jdbcType=VARCHAR},
#{status,jdbcType=INTEGER},#{code,jdbcType=INTEGER})
</insert>
<!--根据激活码code查询用户-->
<select id="checkCode" parameterType="String" resultType="User">
select * from useremail where code = #{code}
</select>
<!--激活账户,修改用户状态-->
<update id="updateUserStatus" parameterType="User">
update useremail set status=1,code=null where id=#{id}
</update>
<!--登录,根据 status=1 进行查询-->
<select id="loginUser" resultType="User">
select * from useremail where username=#{username} and password=#{password} and status=1
</select>
</mapper>
templates
error
404.html
500.html
可自行百度搜索报错页面效果,也可不写404和500页面。
index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<!-- 引入 Bootstrap在线cdn -->
<link href="https://cdn.jsdelivr/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="row clearfix" style="text-align: center">
<div class="page-header">
<h1>
<small>注册中心</small>
</h1>
</div>
</div>
<div align="center">
<form action="/user/registerUser" method="post" style="width: 30%">
<div class="form-group">
<label for="username">用户名</label><br>
<input type="text" class="form-control" id="username" maxlength="10" name="username" placeholder="请输入注册的用户名"
required/>
<br>
</div>
<div class="form-group">
<label for="password">登录密码</label><br>
<input type="password" class="form-control" maxlength="16" id="password" name="password"
placeholder="请输入注册的密码" required/><br>
</div>
<div class="form-group">
<label for="email">邮箱地址</label><br>
<input type="email" class="form-control" id="email" name="useremail" placeholder="请输入可接收邮件的邮箱" required><br>
</div>
<input type="submit" class="btn btn-primary" value="确认注册" onclick="return confirm('确认注册吗?')"/>
</form>
</div>
<div class="row clearfix" style="text-align: center">
<br>
<a href="/user/loginPage" class="btn btn-warning">去登录页面</a>
</div>
</body>
</html>
login.html
<html lang="en" xmlns:th="http://www.thymeleaf">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<!-- 引入 Bootstrap在线cdn -->
<link href="https://cdn.jsdelivr/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="row clearfix" style="text-align: center">
<div class="page-header">
<h1>
<small>登录页面</small>
</h1>
</div>
</div>
<div align="center">
<form action="/user/loginUser" method="post" style="width: 30%">
<!--如果msg的值为空 不显示提示的信息-->
<span th:text="${msg}" th:if="${not #strings.isEmpty(msg)}" style="color: red"></span>
<span th:text="${status}" style="color: pink"></span>
<div class="form-group">
<label for="username">用户名</label><br>
<input type="text" class="form-control" id="username" maxlength="10" name="username" placeholder="请输入您的账户"
required style="width: 60%"/><br>
</div>
<div class="form-group">
<label for="password">密码</label><br>
<input type="password" class="form-control" maxlength="16" id="password" name="password"
placeholder="请输入您的密码" required style="width: 60%"/><br>
</div>
<!--判断是否激活用的-->
<!--<input type="hidden" name="status" value="1">-->
<input type="submit" class="btn btn-primary" value="登录账号"/>
</form>
</div>
<div class="row clearfix" style="text-align: center">
<br>
<a href="/user/indexPage" class="btn btn-warning">去注册页面</a>
</div>
</body>
</html>
success.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册成功</title>
<!-- 引入 Bootstrap在线cdn -->
<link href="https://cdn.jsdelivr/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<script type="text/javascript">
function countDown(secs, surl) {
//alert(surl);
var jumpTo = document.getElementById('jumpTo');
jumpTo.innerHTML = secs;
if (--secs > 0) {
setTimeout("countDown(" + secs + ",'" + surl + "')", 1000);
} else {
location.href = surl;
}
}
</script>
<body>
<div class="row clearfix" style="text-align: center;background-color: pink;color: blue;margin-top: 30px">
<div style="font-size: 20px">
<span>邮件已成功发送,请点击邮箱链接激活用户哦~ </span>
<span id="jumpTo" style="color: black">15</span>秒后将自动跳转到登录页
</div>
</div>
<script type="text/javascript">
// 15 秒后跳转的页面
countDown(15,'http://localhost:8080/user/loginPage');//地测试的路径(15s后自动跳转到登录页)
//countDown(15, 'http://服务端地址/user/loginPage');//服务器测试的路径
</script>
</body>
</html>
welcome.html
处的欢迎页是我找的源码设置的,欢迎页可自定义为自己想设置的内容,此欢迎页效果图如下图所示,可自己更改。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>welcome</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
overflow: hidden;
}
/*canvas{ background: #0c0c0c; }*/
</style>
</head>
<body>
<canvas id="canvas"> 您的浏览器不支持canvas标签,请您更换浏览器</canvas>
<script>
var canvas = document.getElementById("canvas");
var can = canvas.getContext("2d");
var s = window.screen;//获取屏幕
var w = canvas.width = s.width;//获取屏幕宽度
var h = canvas.height = s.height;//获取屏幕高度
can.fillStyle = color2();
var words = Array(256).join("1").split("");
//设置一个包含256个空元素的数组,join("1")用来把数组里的元素拼接成字符串,split("")过滤掉数组里的空元素
setInterval(draw, 50);
// can.font="30px 微软雅黑"; //只设置一个不生效,一定要两个属性都设
// //绘制实心的文本:绘制的文本,文本的坐标x,文本的坐标y
// can.fillText("黑客帝国",100,100);
// // setInterval(draw,50);
function draw() {
//can.fillRect()画一个实心矩形:坐标x,坐标y,矩形宽,举行高
can.fillStyle = 'rgba(0,0,0,0.05)';
can.fillRect(0, 0, w, h);
can.fillStyle = color2();
words.map(function (y, n) {
text = String.fromCharCode(Math.ceil(65 + Math.random() * 57)); //转换为键盘上值
x = n * 10;
can.fillText(text, x, y)
words[n] = (y > 758 + Math.random() * 484 ? 0 : y + 10);
});//数组元素的一个映射
}
//获取随机颜色,三种方法
function color1() {
var colors = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];
var color = "";
for (var i = 0; i < 6; i++) {
//Math.random()产生一个0-1之间的小数
var n = Math.ceil(Math.random() * 15);
color += "" + colors[n];
// console.log(color);
}
return '#' + color;
}
function color2() {
var color = Math.ceil(Math.random() * 16777215).toString(16);
// for( var i=color.length; i<6; i++ ){
// color = '0'+color;
// }
while (color.length < 6) {
color = '0' + color;
}
return '#' + color;
}
function color3() {
return "#" + (function (color) {
return new Array(7 - color.length).join("0") + color;
//神奇的方法,总共字符串有6位,如果只产生了3位,则前面应该补三个0,在长度为7-3=4的空数组中利用join插入0,则为['',0,'',0,'',0,''],刚好三个0补在前面
})((Math.random() * 0x1000000 << 0).toString(16))
// << 0 也是一种取整的方法
}
</script>
</body>
</html>
application.properties
注意设置数据库连接需要更改为自己的,如不是qq邮箱地址 此处要更改邮箱类型地址,此处为qq邮箱。 以及还要配置自己邮箱stmp密码 不会开启邮箱stmp的参考文章顶部方法配置
server.port=8080
# MyBatis相关配置
spring.devtools.remote.restart.enabled=true
spring.devtools.restart.additional-paths=src/main
# 数据库连接配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/数据库?characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=12345678
spring.http.encoding.charset=UTF-8
spring.http.encoding.force=true
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
#MyBatis别名
mybatis.type-aliases-package=com.lemon.emailactivate.entity
mybatis.mapper-locations=mapper/*.xml
spring.thymeleaf.prefix=classpath:/templates/
#QQ smtp.qq
#sina smtp.sina
#aliyun smtp.aliyun
#163 smtp.163
# ↑ 邮箱服务器地址
#此处设置的stmp为qq邮箱
spring.mail.host=smtp.qq
#邮箱用户名(使用自己的邮箱)
spring.mail.username=xxx.qq
#邮箱密码(注意:qq邮箱应该使用独立密码,去qq邮箱设置里面开启POP3/SMTP服务)
spring.mail.password=输入邮箱stmp字符
#编码格式
spring.mail.default-encoding=UTF-8
##发送邮件地址(使用自己的邮箱)
spring.mail.from=xxxx.qq
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache/POM/4.0.0" xmlns:xsi="http://www.w3/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache/POM/4.0.0 https://maven.apache/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lemon</groupId>
<artifactId>emailactivate</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>emailactivate</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--SpringBoot测试支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--SpringBoot热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!--Druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
此代码只供一个发送邮件至邮箱激活,存在一些bug。例如:用户名邮箱已存在还注册 发送邮件等,需要自己后期加入条件判断做进一步的优化
此项目代码已完全提供完毕,如果有遇到问题联系qq1136720013,vx:it566666 ,希望给个赞评论支持一下,感谢支持,你的支持是我创作最大的动力,愿开发道路上一起更进一步!
本文标签: 账户激活码邮箱功能SpringBoot
版权声明:本文标题:基于springboot实现注册功能发送激活码至邮箱激活账户登录 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729999957a1218729.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论