使用 SpringBoot 配置发送邮件功能

1、使用 SpringBoot 配置发送邮件功能
项目总体结构

用户表设计

SET FOREIGN_KEY_CHECKS=0;
CREATE DATABASE sample;
USE sample;
set names utf8;
-- ----------------------------
-- Table structure for tab_mail
-- ----------------------------
DROP TABLE IF EXISTS `tab_mail`;
CREATE TABLE `tab_mail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `active_code` varchar(100) DEFAULT NULL,
  `active_status` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、搭建 SpringBoot 环境

配置 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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.rookie</groupId>
    <artifactId>springboot-mail</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-mail</name>
    <description>Send mail 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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <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>
配置 application.yml 文件
# spring-boot-email
server:
  port: 8081

# 配置发送方信息
spring:
  mail:
    host: smtp.163.com
    username: [email protected]
    password: xxxxxxx                   # 填写客户端的授权码
    default-encoding: utf-8
    properties:
      mail:
        smtp:
          ssl:
            enable: true
# thymeleaf
  thymeleaf:
    cache: false

  mvc:
    date-format: yyyy-MM-dd

# mysql
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/sample?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT&useSSL=false
    type: com.alibaba.druid.pool.DruidDataSource

# mybatis
mybatis:
  mapper-locations: classpath:mapping/*.xml
  type-aliases-package: com.rookie.entity

代码演示

A、mapping & templates 文件夹下的 xml 文件
UserMapper.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.rookie.dao.UserDao">
        <resultMap id="userMap" type="com.rookie.entity.User">
            <result property="id" column="id"/>
            <result property="username" column="username"/>
            <result property="password" column="password"/>
            <result property="email" column="email"/>
            <result property="activeStatus" column="active_status"/>
            <result property="activeCode" column="active_code"/>
        </resultMap>
        <insert id="insert" parameterType="com.rookie.entity.User">
            insert into tab_mail ( username, password,email,active_status,active_code)
            values (#{username}, #{password}, #{email},#{activeStatus},#{activeCode})
        </insert>

        <select id="findUserByActiveCode" parameterType="String" resultType="com.rookie.entity.User">
            select * from tab_mail where active_code = #{activeCode}
        </select>

        <!--激活账户,修改用户状态-->
        <update id="update" parameterType="com.rookie.entity.User">
            update tab_mail
            set active_status=#{activeStatus},username=#{username},password=#{password},
            email=#{email}, active_status=#{activeStatus},active_code=#{activeCode}
            where id=#{id}
        </update>

        <!--登录,根据 activeStatus=1 进行查询-->
        <select id="select" resultType="com.rookie.entity.User">
            select * from tab_mail where username=#{username} and password=#{password} and active_status=1
        </select>
    </mapper>

=========================================================================================
activeSuccess.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>激活成功</title>
    </head>
    <body>
        用户已激活!请<h1 style="color: green;"><a href="/user/loginPage">登录</a></h1>
    </body>
    </html>

=========================================================================================
error.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>错误</title>
    </head>
    <body>
    <h1 style="color: red;">用户不存在或未激活!</h1>
    <a href="/user/loginPage">登录</a>
    </body>
    </html>
 =========================================================================================
index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册</title>
    </head>
    <body>
    <form action="/user/register" method="post">
        用户名:<input type="text" id="username" name="username"/><br>
        密码:<input type="password" id="password" name="password"/><br>
        邮箱:<input type="email" id="email" name="email"><br>
        <input type="submit" value="注册">
    </form>
    <a href="/user/loginPage">登录</a>
    </body>
    </html>

=========================================================================================
login.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录</title>
    </head>
    <body>
    <form action="/user/login" method="post">
        用户名:<input type="text" id="username" name="username"/><br>
        密码:<input type="password" id="password" name="password"/><br>
        <input type="submit" value="登录">
    </form>
    </body>
    </html>

=========================================================================================
success.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册成功</title>
    </head>
    <body>
    前往邮箱激活账户
    </body>
    </html>

=========================================================================================
welcome.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>欢迎</title>
    </head>
    <body>
    登录成功
    </body>
    </html>
========================================================================================= 
B、具体代码逻辑实现
public class IDUtils {
    public static String getUUID(){
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
}
=========================================================================================
@Setter
@Getter
@ToString
public class User implements Serializable{
    private Integer id;
    private String username;
    private String password;
    private String email;
    private String activeCode;     // 激活码
    private Integer activeStatus;   // 激活状态 0 未激活 1 已激活
}
=========================================================================================
@Controller
public class IndexController {

    @RequestMapping("/")
    public String index(){

        return "index";
    }
}
=========================================================================================
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 注册
     *
     * @param user
     * @return
     */
    @RequestMapping("/register")
    public String registerUser(User user) {
        user.setActiveStatus(0);
        user.setActiveCode(IDUtils.getUUID());
        userService.register(user);
        return "success";
    }

    /**
     * 激活校验码
     *
     * @param code
     * @return
     */
    @RequestMapping("/checkCode")
    public String checkCode(String code) {
        User user = userService.getUserByActiveCode(code);
        if (user != null) {
            user.setActiveStatus(1);
            user.setActiveCode("");
            userService.update(user);

            return "activeSuccess";
        }
        return "login";
    }

    /**
     * 跳转登陆页面
     *
     * @return login
     */
    @RequestMapping("/loginPage")
    public String login() {

        return "login";
    }

    /**
     * @param user
     * @return
     */
    @RequestMapping("/login")
    public String login(User user) {
        User userInfo = userService.getInfo(user);
        if (userInfo != null) {
            return "welcome";
        }
        return "error";
    }
}
========================================================================================= @Component
public interface UserDao {

    /**
     * 注册
     * @param user
     */
    void insert(User user);

    /**
     * 根据激活码查询用户
     * @param activeCode
     * @return User
     */
    User findUserByActiveCode(String activeCode);

    /**
     * 激活用户
     * @param user
     */
    void update(User user);

    /**
     *  查询用户
     * @param user
     * @return User
     */
    User select(User user);
}
=========================================================================================
@SpringBootApplication
@MapperScan(basePackages = "com.rookie.dao")
public class SpringbootMailApplication {

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

}
=========================================================================================
public interface MailService {

    /**
     *  发送普通邮件
     * @param to        发给谁
     * @param subject   发送的主题
     * @param content   发送的内容
     */
    void sendMail(String to, String subject, String content);
}   

@Service
@Slf4j
public class MailServiceImpl implements MailService {

    @Autowired
    private JavaMailSenderImpl mailSender;

    @Value("${spring.mail.username}")
    private String from;

    @Override
    public void sendMail(String to, String subject, String content) {
        log.info("开始发送邮件:发送给 - >{},发送的主题 -> {},发送的内容 - >{}", to, subject, content);

        MimeMessage message;
        try {
            message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setSubject(subject);
            helper.setTo(to);
            helper.setText(content, true);
            mailSender.send(message);

            log.info("邮件发送成功");
        } catch (MessagingException e) {
            log.error("邮件发送失败",e);
        }
    }
}

=========================================================================================
public interface UserService {

    /**
     * 用户注册
     * @param user
     */
    void register(User user);

    /**
     * 根据激活码找用户
     * @param activeCode
     * @return User
     */
    User getUserByActiveCode(String activeCode);

    /**
     * 修改用户
     * @param user
     */
    void update(User user);

    /**
     * 登陆
     * @param user
     * @return User
     */
    User getInfo(User user);
}

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao  userDao;

    @Autowired
    private MailService mailService;

    @Override
    public void register(User user) {
        userDao.insert(user);
        //获取激活码
        String code = user.getActiveCode();
        // System.out.println("激活码:"+code);
        //主题
        String subject = "来自 Rookie 的激活邮件";
        //上面的激活码发送到用户注册邮箱
        String context = "<a href='http://localhost:8081/user/checkCode?code="+code+"'>点击激活【Rookie网站】</a>";

        //发送激活邮件
        mailService.sendMail(user.getEmail(),subject,context);
    }

    @Override
    public User getUserByActiveCode(String activeCode) {
        return userDao.findUserByActiveCode(activeCode);
    }

    @Override
    public void update(User user) {
        userDao.update(user);
    }

    @Override
    public User getInfo(User user) {
        return userDao.select(user);
    }
}  

原文地址:https://www.cnblogs.com/miantiao312/p/10887876.html

时间: 2024-10-27 13:34:21

使用 SpringBoot 配置发送邮件功能的相关文章

SpringBoot配置发送邮件

一.导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 二.在zpplication.properties种添加邮箱配置 spring.mail.host=smtp.qq.com spring.mail.username=54281*

python -- 简单配置发送邮件功能

本文用第三方类库:yagmail 实现:以QQ邮箱作为发送邮箱为例.最终的实现效果:给指定邮箱,发送指定内容的邮件. 准备工作 1.用于发送邮件的账号信息 比如账号用自己的qq邮箱,但'密码'需要在邮箱:设置--账户--开启POP3/SMTP服务,开启后会获得授权码(把它理解为'密码'就行~). 2.邮件服务器的信息 需要邮件服务器的地址和端口,一般在邮箱的帮助中都可以查询到:QQ邮箱为例,服务器地址为:smtp.qq.com,邮箱端口为:4653.邮件触达相关 邮件标题,内容,收件人等,这些就

DEDECMS会员注册如何配置邮箱发送邮件功能

网站邮件功能是一个非常基础和有效的通信工具,配合dede会员注册邮件验证功能可以大量的拒绝垃圾注册用户.那么如何配置DEDECMS会员注册邮箱发送邮件功能? 1:配置dedecms网站发信EMAIL 登录dede管理后台->系统->系统基本参数设置->核心设置->选择“网站发信EMAIL:”输入你的发信邮箱,本演示教程使用QQ邮箱来示范——[email protected](说明:防止垃圾邮件的骚扰,@符号将用*替换),详细见下图: 2:配置dedecms发信邮件smtp参数 设置

Python django实现简单的邮件系统发送邮件功能

Python django实现简单的邮件系统发送邮件功能 本文实例讲述了Python django实现简单的邮件系统发送邮件功能. django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了.2.send_mail().send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注底层的EmailMessage.3.异常处理防止邮件头注入.4.一定要弄懂Email backends 邮件发送后

Redmine发布新闻,自动发送邮件功能失效恢复

问题描述:操作数据库,修改项目公开状体后,创建新闻,自动发送邮件功能失效. 问题检查和恢复测试: 1.检查管理员权限 2.重新手动配置项目公开状态,覆盖数据操作 3.对比其他正常项目数据库状态,进行恢复. 恢复结果: 原文地址:https://www.cnblogs.com/YatHo/p/8341096.html

Springboot配置ssl使用https

SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持.SSL协议分为两层,SSL记录协议建立在TCP之上,为高层协议提供数据封装.压缩.加密等基本功能支持.SSL握手协议建立在SSL记录协议之上,用户实际数据传输开始前进行身份验证.协商加密算法.交换加密秘钥. 1.生成证书,可以使自签名或者从SSL证书授权中心获得的. JDK中

【SpringBoot】SpringBoot配置与单元测试(二)

SpringBoot项目创建参考[SpringBoot]SpringBoot快速入门(一) 本文介绍SpringBoot项目的POM文件.配置与单元测试 POM文件 1.SpringBoot的pom文件中,看到都依赖一个springboot的父项目,如下 1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring‐boot‐starter‐parent</a

solr 配置中文分析器/定义业务域/配置DataImport功能(测试用)

一.配置中文分析器    使用IKAnalyzer    配置方法:        1)把IK的jar包添加到solr工程中/WEB-INF/lib目录下        2)把IK的配置文件扩展词典,放到classpath下./WEB-INF/classes目录下        3)在schema.xml中定义FieldType,指定使用IK作为分析器 <!-- IKAnalyzer--> <fieldType name="text_ik" class="s

SpringBoot配置详解

SpringBoot配置详解 SpringBoot自动化配置 在上一节中我们使用Spring Boot实现了一个简单的RESTful API应用,在实现过程中,除了Maven的pom文件的一些配置,我们没有做任何其他的配置,这就是Spring Boot的自动化配置带来的好处,但是,我们还需要了解如何在Spring Boot中修改这些自动化配置的内容,以应对一些特殊的场景需求. 配置文件—Spring Boot支持YAML配置文件和properties配置文件 Spring Boot的默认配置文件