SpringBoot3整合邮件服务实现邮件发送功能

 更新时间:2024年05月28日 09:39:08   作者:蒾酒  
本文介绍了spring boot整合email服务,实现发送验证码,邮件(普通文本邮件、静态资源邮件、附件邮件),文中通过代码示例介绍的非常详细,坚持看完相信对你有帮助,需要的朋友可以参考下

内容概要

本文介绍了spring boot整合email服务,实现发送验证码,邮件(普通文本邮件、静态资源邮件、附件邮件)。

开通服务

实现email服务需要先将自己的邮箱开通POP3/IMAP服务才可以通过该邮箱发送邮件,开通步骤如下:

这里以QQ邮箱为例

1.进入QQ邮箱官网

登录QQ邮箱

2.登录后点击设置

3.选择账号

找到 POP3/IMAP.....服务这里开启你的服务,这里我已经开启了的。

4.开启服务

开启成功会得到授权码 ,记住这个授权码。下面开始在spring boot中整合。

spring boot整合

1.依赖引入

pom.xml:

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

2.配置属性

application.yml:

修改成你自己的实际信息。

spring:
  #邮件服务配置
  mail:
    host: smtp.qq.com #邮件服务器地址
    protocol: smtp #协议
    username: 305462*****@qq.com #发送邮件的邮箱也就是你开通服务的邮箱
    password: fiwvcy******d #开通服务后得到的授权码
    default-encoding: utf-8 #邮件内容的编码

3.创建邮件发送工具类

使用@component注解标记为组件,可以在Service中注入使用。

里面一共定义了三种发送邮件方法:

  • 发送纯文本的普通邮件,可以发送一些纯文本的消息以及验证码内容。
  • 发送HTML格式的文本内容,可以发一些静态资源,图片,音频,视频等,也可以发验证码信息。
  • 发送携带附件的邮件,比如word,excel,pdf文档或者其他文件。

具体可以根据业务需求调整代码。我实现的较为简单可以当个模板使用。

import jakarta.annotation.Resource;
import jakarta.mail.internet.MimeMessage;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
 
import java.io.File;
import java.util.Objects;
 
/**
 * @author mijiupro
 */
@Component
public class EmailUtil {
    @Resource
    private JavaMailSender mailSender;
 
    @Value("${spring.mail.username}")
    private String from ;// 发件人
 
    /**
     * 发送一般邮件--无附件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendGeneralEmail(String subject, String content, String... to){
        // 创建邮件消息
        org.springframework.mail.SimpleMailMessage message = new org.springframework.mail.SimpleMailMessage();
        message.setFrom(from);
        // 设置收件人
        message.setTo(to);
        // 设置邮件主题
        message.setSubject(subject);
        // 设置邮件内容
        message.setText(content);
 
        // 发送邮件
        mailSender.send(message);
 
        return true;
    }
    /**
     * 发送带附件的邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @param filePaths 附件路径
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendAttachmentsEmail(String subject, String content, String[] to, String[] filePaths) {
        // 创建邮件消息
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(from);
        // 设置收件人
        helper.setTo(to);
        // 设置邮件主题
        helper.setSubject(subject);
        // 设置邮件内容
        helper.setText(content);
 
        // 添加附件
        if (filePaths != null) {
            for (String filePath : filePaths) {
                FileSystemResource file = new FileSystemResource(new File(filePath));
                helper.addAttachment(Objects.requireNonNull(file.getFilename()), file);
 
            }
        }
        // 发送邮件
        mailSender.send(mimeMessage);
        return true;
    }
 
    /**
     * 发送带静态资源的邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @param rscPath 静态资源路径
     * @param rscId 静态资源id
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendInlineResourceEmail(String subject, String content, String to, String rscPath, String rscId) {
        // 创建邮件消息
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        // 设置发件人
        helper.setFrom(from);
        // 设置收件人
        helper.setTo(to);
        // 设置邮件主题
        helper.setSubject(subject);
 
        //html内容图片
        String contentHtml = "<html><body>这是邮件的内容,包含一个图片:<img src=\'cid:" + rscId + "\'>"+content+"</body></html>";
 
        helper.setText(contentHtml, true);
        //指定讲资源地址
        FileSystemResource res = new FileSystemResource(new File(rscPath));
        helper.addInline(rscId, res);
 
        mailSender.send(mimeMessage);
        return true;
    }
 
}

4.编写测试用例测试

下面测试前两种发送邮件的方法。

测试发送普通文本邮件

import com.mijiu.commom.util.EmailUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
@SpringBootTest
public class EmailTest {
    @Autowired
    private EmailUtil emailUtil;
 
 
    @Test
    public void sendEmail() {
        //发送邮件
        boolean b = emailUtil.sendGeneralEmail("测试邮件", " 这是测试邮件", "你的邮箱@163.com");
        System.out.println(b);
    }
}

修改成发送目标邮箱运行代码测试即可。 

测试成功。

测试发送图片邮件

import com.mijiu.commom.util.EmailUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
@SpringBootTest
public class EmailTest {
    @Autowired
    private EmailUtil emailUtil;
 
 
    @Test
    public void sendEmail() {
 
        // 发送图片邮件
        boolean b = emailUtil.sendInlineResourceEmail("测试邮件", " 这是测试邮件", "你的邮箱@163.com",
                "C:\\Users\\mijiupro\\Desktop\\潮.jpg", "C:\\Users\\mijiupro\\Desktop\\潮.jpg");
        System.out.println(b);
    }
}

修改成发送目标邮箱运行代码测试即可。  

以上就是SpringBoot3整合邮件服务实现邮件发送功能的详细内容,更多关于SpringBoot3邮件发送的资料请关注脚本之家其它相关文章!

相关文章

  • SpringSecurity中的Filter Chain(过滤器链)

    SpringSecurity中的Filter Chain(过滤器链)

    Spring Security的Filter Chain是由一系列过滤器组成的管道,每个过滤器执行特定的安全功能,Spring Security能够提供强大而灵活的安全控制机制,从而保护你的应用程序不受各种网络安全威胁的侵害,本文介绍SpringSecurity中的Filter Chain,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Java如何解析html中的内容并存到数据库详解

    Java如何解析html中的内容并存到数据库详解

    最近用到了Java解析Html的一个库Jsoup,所以下面这篇文章主要给大家介绍了关于Java如何解析html中的内容并存到数据库的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Maven构建忽略测试失败的解决方案

    Maven构建忽略测试失败的解决方案

    这篇文章主要介绍了Maven构建忽略测试失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot整合log4j日志与HashMap的底层原理解析

    SpringBoot整合log4j日志与HashMap的底层原理解析

    这篇文章主要介绍了SpringBoot整合log4j日志与HashMap的底层原理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java常用函数式接口总结

    Java常用函数式接口总结

    今天给大家带来的是关于Java的相关知识,文章围绕着Java常用函数式接口展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 聊聊Java中的Native修饰符

    聊聊Java中的Native修饰符

    这篇文章主要介绍了Java中的Native修饰符使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot利用MDC机制过滤单次请求的所有日志

    SpringBoot利用MDC机制过滤单次请求的所有日志

    在服务出现故障时,我们经常需要获取一次请求流程里的所有日志进行定位 ,如何将一次数据上报请求中包含的所有业务日志快速过滤出来,就是本文要介绍的,需要的朋友可以参考下
    2024-04-04
  • SpringData JPA中查询接口Repository的使用

    SpringData JPA中查询接口Repository的使用

    本文主要介绍了SpringData JPA中查询接口Repository的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • springboot项目获取请求头当中的token的方法

    springboot项目获取请求头当中的token的方法

    本文主要介绍了springboot项目获取请求头当中的token的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • Java使用ExecutorService来停止线程服务

    Java使用ExecutorService来停止线程服务

    这篇文章主要介绍了Java使用ExecutorService来停止线程服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04

最新评论