SpringBoot集成邮箱功能并使用Knife4j测试

wuchangjian2021-11-14 19:13:26编程学习

SpringBoot集成邮箱功能并使用Knife4j测试

哔哩哔哩链接:https://www.bilibili.com/video/BV1uA411N7cm

1.获取163或QQ邮箱授权码

163邮箱授权码

前往163邮箱官网 https://mail.163.com/ ,注册一个邮箱,之后登录,在登录界面点击"设置"下的"POP3/SMTP/IMAP"

image-20211114172745278

在以下界面开启 IMAP/SMTP服务、POP3/SMTP服务,注意开启之后会得到一个授权密码,授权密码只显示一次,需要我们复制下来。

image-20211114173007819

授权密码:

image-20211114173320450

QQ邮箱授权码

前往qq邮箱官网 https://mail.qq.com ,注册邮箱,登录之后,点击“设置”,之后点击“账户”

image-20211114173855102

往下拉,开启 “POP3/SMTP服务”

image-20211114174002049

之后我们会得到一个授权码,我们复制此授权码

image-20211114174307814

2.新建maven项目

我们此处以ideal为例,打开ideal,新建一个maven项目,我们此处点击next

image-20211114170923151

输入项目信息,点击finish

image-20211114171200330

项目目录

此处我们先展示整个项目的目录结构:

image-20211114175645389

3.导入依赖

我们需要引入 knife4j 、spring-boot-starter-mail、spring-boot-starter-web等依赖,具体pom文件如下:

<?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.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.example</groupId>
    <artifactId>springboot-mail</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>springboot-mail</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-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.8</version>
        </dependency>
        <!-- io常用工具类 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

此处我们介绍knife4j 、spring-boot-starter-mail 这两个依赖

knife4j

csdn链接:https://blog.csdn.net/weixin_36380516/article/details/104604257

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望她能像一把匕首一样小巧、轻量、并且功能强悍!

knife4j的前身是swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j。

更名后主要专注的方面

  • 前后端Java代码以及前端Ui模块进行分离,在微服务架构下使用更加灵活
  • 提供专注于Swagger的增强解决方案,不同于只是改善增强前端Ui部分

spring-boot-starter-mail

csdn链接:https://blog.csdn.net/yimcarson/article/details/84936440

Spring Boot2.x集成了mail模块,引入即可使用邮箱服务

4.配置

我们在resources文件夹下新建一个 application.yml 配置文件,具体配置如下

163邮箱

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8080
  servlet:
    # 应用的访问路径
    context-path: /

spring:
  # 邮箱配置
  mail:
    # POP3服务器: pop.163.com
    # SMTP服务器: smtp.163.com
    # IMAP服务器: imap.163.com
    # POP3/SMTP/IMAP服务全部支持SSL连接
    host: smtp.163.com
    # 163邮箱账号
    username: 输入你的163邮箱账号
    # 授权密码
    password: 输入你的163邮箱授权码
    # 端口号
    port: 25

QQ邮箱

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8080
  servlet:
    # 应用的访问路径
    context-path: /

spring:
  # 邮箱配置
  mail:
    # POP3服务器地址为“pop.qq.com”,SMTP服务器地址为“smtp.qq.com”
    # 注:
    # 1、SMTP服务器需要身份验证。
    # 2、如果是设置POP3和SMTP的SSL加密方式,则端口如下:
    #    1)POP3服务器(端口995);
    #    2)SMTP服务器(端口465或587)。
    host: smtp.qq.com
    # qq邮箱账号
    username: 输入你的qq邮箱账号
    # 授权密码
    password: 输入你的qq邮箱授权码
    # 端口号
    port: 465
    default-encoding: utf-8
    properties:
      mail:
        smtp:
          ssl:
            enable: true #一定要开启ssl,不然会503 验证失败的

5.新建controller

package com.coding.mail.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.IOException;

@Slf4j
@Api(tags = "发送邮件")
@RequiredArgsConstructor
@RestController
public class EmailController {

    private final JavaMailSender javaMailSender;

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


    @ApiOperation("发送简单邮件")
    @PostMapping("sendSimpleMail")
    public String sendSimpleMail(
            @ApiParam("收件地址") @RequestParam String address,
            @ApiParam("标题") @RequestParam String subject,
            @ApiParam("正文") @RequestParam String body) {
        SimpleMailMessage smm = new SimpleMailMessage();
        smm.setFrom(account);
        smm.setTo(address);
        smm.setSubject(subject);
        smm.setText(body);
        javaMailSender.send(smm);
        return "发送成功";
    }

    @ApiOperation("发送带附件的邮件")
    @PostMapping("sendAttachmentMail")
    public String sendAttachmentMail(
            @ApiParam("收件地址") @RequestParam String address,
            @ApiParam("标题") @RequestParam String subject,
            @ApiParam("正文") @RequestParam String body,
            @ApiParam("附件") @RequestPart MultipartFile attach) throws MessagingException, IOException {
        MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
        mimeMessageHelper.setFrom(account);
        mimeMessageHelper.setTo(new String[]{address});
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(body);
        //文件路径
        byte[] bytes = attach.getBytes();
        /*文件名设置*/
        String name = attach.getOriginalFilename();
        mimeMessageHelper.addAttachment(name, new ByteArrayResource(bytes));
        log.info("fileName:{}", name);
        javaMailSender.send(mimeMailMessage);
        return "发送成功";
    }
}

6.新建项目启动类并启动

package com.coding.mail;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

@EnableSwagger2WebMvc
@SpringBootApplication
public class DemoMailApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoMailApplication.class, args);
    }
}

image-20211114180128605

7.访问knife4j并测试

我们输入 http://localhost:8080/doc.html 访问knife4j,注意,knife4j的默认访问路径为 /doc.html

简单邮件测试

我们进行测试,输入要测试邮箱地址、标题、内容,点击“发送”,过程可能会有点久,我们耐心等待即可,我们可以使用异步任务解决,详情请看下方的“扩展”

image-20211114181150203

我们发现邮箱发送成功:

image-20211114181537923

带附件的邮箱测试

带附件的邮箱测试和上面的简单邮箱测试是一样的,我们这里就不再测试

image-20211114181606813

扩展:开启异步任务

csdn链接:https://blog.csdn.net/admin123404/article/details/103705915

在平常的开发中经常要同时执行一些业务,比如发送邮件,处理数据等。为了不阻塞线程,我们可以采用多线程的方式进行处理。

此处我们想要为邮箱发送的这一操作开启异步任务,我们可以在对应的方法上加上 @Async 注解 ,告诉Spring这是一个异步任务。spring就会自己创建一个线程池来调用这个方法。

我们修改controller中的代码,修改如下:

image-20211114182835849

有了@Async注解还不够,想要它生效还要**在启动类上加上@EnableAsync ,**启动异步注解功能。

image-20211114183012764

我们重启项目,再次发送邮箱测试,发现当我们点击发送时很快就返回了响应,而不用等待邮箱发送成功了。

源码获取

至此,我们的SpringBoot集成邮箱通知的功能就讲解完成了。源码可以通过关注我的微信公众号 我爱学习呀嘻嘻 ,回复关键字“邮箱集成”进行获取哦。

image-20211108230322493

返回列表

上一篇:HTML 元素

下一篇:vsCode 软件安装

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。