SpringBoot,使用JavaMailSender发送邮件(含源码)。

2023-10-31 04:04

本文主要是介绍SpringBoot,使用JavaMailSender发送邮件(含源码)。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    本文主要讲解使用JavaMailSender发送邮件,并给出对应的参考案例、源码。

1、使用的依赖jar包

     JavaMailSender发送邮件,只需要 "spring-boot-starter-mail" jar包就可以。考虑到邮件发送时,使用 Hutool工具生成Excel文件做为附件,因此这里也将 Hutool工具包依赖添加上。

<!-- 引入 spring-boot-starter-mail 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency><!-- hutool工具包 -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version>
</dependency><!-- hutool工具需要和Apache中的POI合用,注意版本的问题。 -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.0.0</version>
</dependency>

2、application.properties中配置相应的属性内容。

      需要说明的是,163邮箱在邮件发送时开启了授权模式,需要将IMAP/SMTP服务、POP3/SMTP服务开启,spring.mail.password 属性填写的是授权码而非密码。

# 在我使用QQ邮箱测试时,不知道是不是QQ邮箱安全性较高,使用QQ邮箱测试失败了!  2022/12/09  17:44
# 发送服务器域名或地址,以 163 邮箱为例.
spring.mail.host=smtp.163.com
# 163邮箱中的账户,在 com.moon.EmailApplicationTests.test01 中, message.setFrom("...") 要与这里的 mail.username 保持一致.
spring.mail.username=abc_xxxx_123@163.com
# 163 邮箱中的授权码
spring.mail.password=XSL6666666IZZ
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
# 邮件接收时间的限制,单位毫秒
spring.mail.properties.mail.smtp.timeout = 10000
# 连接时间的限制,单位毫秒
spring.mail.properties.mail.smtp.connectiontimeout = 10000
# 邮件发送时间的限制,单位毫秒
spring.mail.properties.mail.smtp.writetimeout = 10000

3、简单的邮件发送案例
/*** 测试:实现一封简单邮件的发送** @author moon 2022/12/09  17:10*/@Testpublic void sendSimpleMail() throws Exception {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo("12345678@qq.com");
//		message.setTo("123333444@qq.com");message.setSubject("主题:简单邮件测试....");message.setText("测试邮件内容");mailSender.send(message);log.info("实现一封简单邮件的发送,邮件发送成功~~~~~");}

程序运行之后,邮件发送成功。

4、发送邮件并带附件
/*** 测试:发送邮件并带附件** @author moon 2022/12/12  09:58*/@Testpublic void sendAttachmentsMail() throws Exception {// 日期格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置邮件发送时间Date sendDate = sdf.parse("2023-07-10 17:51:50");MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//		MimeMessageHelper helper2 = new MimeMessageHelper(mimeMessage);try {helper.setFrom(from);helper.setTo("12345678@qq.com");helper.setSubject("主题:邮件发送含附件");  // 标题helper.setSentDate(sendDate);  // 设置发送时间:没有实现定时发送。当运行该测试类后,邮件就直接发送了。  2022/12/12  10:34helper.setText("邮件中含有附件,请查收。");  // 邮件内容FileSystemResource file = new FileSystemResource(new File("si_cong.jpg"));FileSystemResource file2 = new FileSystemResource(new File("荷花.png"));helper.addAttachment("附件-1.jpg", file);helper.addAttachment("附件-2.png", file2);mailSender.send(mimeMessage);log.info("-------------- 邮件发送成功 --------------");} catch (Exception e) {log.error("发送邮件时发生异常!", e);}}

5、发送邮件并嵌入静态资源
/*** 测试:发送邮件并嵌入静态资源.** @throws Exception** @author  moon  2022/12/12  10:38*/@Testpublic void sendInlineMail() throws Exception {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);try {//邮件发送人helper.setFrom(from);//邮件接收人helper.setTo("12345678@qq.com");//邮件主题helper.setSubject("主题:邮件嵌入静态资源");//邮件内容,html格式helper.setText("<html><body><img src=\"cid:abc\"><p>邮件发送测试001</p></body></html>", true);FileSystemResource file = new FileSystemResource(new File("si_cong.jpg"));// addInline()函数中,入参 "contentId" 需要与 <img> 标签中 cid 的值保持一致.helper.addInline("abc", file);//发送mailSender.send(mimeMessage);log.info("-------------- 邮件发送成功 --------------");} catch (Exception e) {log.error("发送邮件时发生异常!", e);}}

程序运行之后,邮件发送成功。

源码路径: springboot-mail 项目  ,SpringBoot2.x--翟永超/springboot-mail 项目中,参考 com.moon.EmailApplicationTests 单元测试类。

福利推荐:[推荐]SpringBoot,邮件发送附件含Excel文件(含源码)。            

参考文章:      

1、使用JavaMailSender发送邮件 | 程序猿DD

2、

3、

这篇关于SpringBoot,使用JavaMailSender发送邮件(含源码)。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/312686

相关文章

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati