SpringBoot整合Javamail实现邮件发送功能

 更新时间:2023年12月29日 09:22:36   作者:原来是好奇心  
邮件发送是一个很普遍的功能,springboot整合了相关的starter,本文给大家介绍了可以实现一个简单的邮件发送功能的实例,文中通过代码给大家介绍的非常详细,感兴趣的朋友可以参考下

说明:邮件发送是一个很普遍的功能,springboot整合了相关的starter,以下方式可以实现一个简单的邮件发送功能。

1、引入依赖

  • mail依赖,发送邮件使用
  • test依赖,测试使用
<!-- email -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- test -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>compile</scope>
</dependency>

2、配置yml文件

spring:
  mail:
    host: smtp.qq.com
    port: 25
    protocol: smtp
    username: 123456789@qq.com
    password: oujhlavdjhirgiee  
    default-encoding: UTF-8

注意:password属性是邮箱授权码,用于第三方接口调用使用, 而不是邮箱登录密码,需要登录邮箱查看或者申请获取。下面是qq邮箱授权码获取方式(设置->账号->账号安全)

3、编写测试代码

这里主要测试了发送两种格式的邮件,一种是纯文字的邮件,另一种是带有附件的邮件。

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
 
@SpringBootTest
class EmailUtilsTest {
 
    // 发件人邮箱
    @Value("${spring.mail.username}")
    private String mailFrom;
 
    // 收件人邮箱
    private static String MAIL_TO = "zhangsan123@163.com";
 
    // 测试发送PDF文件的路径
    private static String PDF_PATH = "E:\\test.pdf";
 
    @Autowired
    private JavaMailSender mailSender;
 
    /**
     * 测试发送文字内容
     */
    @Test
    void testSendText() {
        // 邮件标题
        String subject = "测试邮件";
        // 邮件文字内容
        String textContent = "你好,这是测试邮件4";
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(mailFrom);
            helper.setTo(MAIL_TO);
            helper.setSubject(subject);
            helper.setText(textContent, true);
            mailSender.send(message);
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
 
    /**
     * 测试发送文件内容
     */
    @Test
    void testSendFile() {
        // 邮件标题
        String subject = "一份测试发送的PDF文件";
        // 邮件文本内容
        String textContent = "这是您的文件,请注意查收";
        // 邮件文件内容
        FileSystemResource pdfFile = new FileSystemResource(PDF_PATH);
        // 文件名字
        String fileName = "测试文件.pdf";
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(mailFrom);
            helper.setTo(MAIL_TO);
            helper.setSubject(subject);
            helper.setText(textContent, true);
            // 如果一次要发送多个附件, 只需要添加多个 helper.addAttachment() 即可
            helper.addAttachment(fileName, pdfFile);
            mailSender.send(message);
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
 
    /**
     * 扩展: 不使用yml文件, 使用对象的方式设置属性值
     */
    @Test
    void testSendFileNoYml() {
        // 邮件标题
        String subject = "一份测试发送的PDF文件";
        // 邮件文本内容
        String textContent = "这是您的文件,请注意查收";
        // 邮件文件内容
        FileSystemResource pdfFile = new FileSystemResource(PDF_PATH);
        // 文件名字
        String fileName = "测试文件.pdf";
        // 获取自定义属性的sender
        JavaMailSender javaMailSender = getJavaMailSender();
        MimeMessage message = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(mailFrom);
            helper.setTo(MAIL_TO);
            helper.setSubject(subject);
            helper.setText(textContent, true);
            // 如果一次要发送多个附件, 只需要添加多个 helper.addAttachment() 即可
            helper.addAttachment(fileName, pdfFile);
            mailSender.send(message);
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
 
    /**
     * 获取自定义的属性的 JavaMailSender 对象
     * @return JavaMailSender
     */
    public JavaMailSender getJavaMailSender(){
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        // 设置发送的服务器ip (qq:smtp.qq.com   网易:smtp.126.com)
        javaMailSender.setHost("qq:smtp.qq.com");
        javaMailSender.setUsername("1454376161@qq.com");
        // 邮箱授权码
        javaMailSender.setPassword("oujhldvdjhirgiea");
        // 设置端口(默认25, 或者设置456)
        javaMailSender.setPort(465);
        // 设置编码方式,避免常出现乱码 
        javaMailSender.setDefaultEncoding("UTF-8");
        
        //其他属性
        Properties p = new Properties();
        p.setProperty("mail.smtp.auth", "true");
        p.setProperty("mail.smtp.ssl", "true");
        p.setProperty("mail.smtp.socketFactory.port", "465");
        p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        p.setProperty("mail.smtp.starttls.enable", "true");
        p.setProperty("mail.smtp.starttls.required", "true");
        javaMailSender.setJavaMailProperties(p);
        return javaMailSender;
    }
}

到此这篇关于SpringBoot整合Javamail实现邮件发送功能的文章就介绍到这了,更多相关SpringBoot整合Javamail邮件发送内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java程序控制逻辑—流程控制

    Java程序控制逻辑—流程控制

    这篇文章主要介绍了Java程序的控制逻辑流程控制,流程控制中最基本的就是条件执行,也就是说,一些操作只能在某些条件满足的情况下才执行,在一些条件下执行某种操作,在另外一些条件下执行另外的操作,需要的朋友可以参考一下
    2022-01-01
  • Spring获取管理对象常用方法详解

    Spring获取管理对象常用方法详解

    这篇文章主要介绍了Spring获取管理对象常用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 使用lombok@Data存在extends时需要注意的问题

    使用lombok@Data存在extends时需要注意的问题

    在Java编程中,正确实现equals方法是保证对象比较一致性的关键,使用instanceof检查类型可能导致违反对称性原则,即当子类和父类都重写equals时可能出现a.equals(b)不等于b.equals(a)的情况,Lombok的@EqualsAndHashCode注解可以通过callSuper=true参数
    2024-10-10
  • spring-boot-autoconfigure模块用法详解

    spring-boot-autoconfigure模块用法详解

    autoconfigure就是自动配置的意思,spring-boot通过spring-boot-autoconfigure体现了"约定优于配置"这一设计原则,而spring-boot-autoconfigure主要用到了spring.factories和几个常用的注解条件来实现自动配置,思路很清晰也很简单,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • MyBatis-Plus 分页插件配置的两种方式实现

    MyBatis-Plus 分页插件配置的两种方式实现

    本文主要介绍了MyBatis-Plus 分页插件配置的两种方式实现,包括使用PaginationInterceptor和MybatisPlusInterceptor两种方式,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Java MQTT实战应用

    Java MQTT实战应用

    本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、SpringBoot整合方法与MQTTX工具下载链接,对java mqtt相关知识感兴趣的朋友一起看看吧
    2025-06-06
  • mybatis注解动态sql注入map和list方式(防sql注入攻击)

    mybatis注解动态sql注入map和list方式(防sql注入攻击)

    这篇文章主要介绍了mybatis注解动态sql注入map和list方式(防sql注入攻击),具有很好的参考价值,希望对大家有所帮助。
    2021-11-11
  • Spring MVC中处理ajax请求的跨域问题与注意事项详解

    Spring MVC中处理ajax请求的跨域问题与注意事项详解

    跨域问题是我们大家在开发中会经常遇到的一个问题,所以下面这篇文章主要给大家介绍了关于Spring MVC中处理ajax请求的跨域问题与注意事项的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • SpringBoot项目引入MCP的实现示例

    SpringBoot项目引入MCP的实现示例

    本文主要介绍了SpringBoot项目引入MCP的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Gradle jvm插件系列教程之Java Library插件权威详解

    Gradle jvm插件系列教程之Java Library插件权威详解

    这篇文章主要介绍了Java Library插件权威详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01

最新评论