Web应用项目开发 ——Spring Boot邮件发送

一.邮件发送介绍

邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。在现代的Web应用程序中,邮件发送功能是非常常见且重要的一部分,Spring Boot框架提供了简单且强大的方式来实现邮件发送功能。Spring中提供了 JavaMailsender 用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfguration 对邮件的发送做了进一步简化。下面就分步骤来看一下Spring Boot如何进行邮件发送。

二.发送前准备

1.首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全程为Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信协议。**SpringBoot提供了对邮件发送的集成支持,使得发送邮件变得更加简单。**以下是实现步骤:
(1)通过QQ邮箱或者163邮箱开启POP3/SMTP服务,成功开启后会获取到一个授权码,保存好,之后会使用到。

**(2)**添加依赖

需要在项目的**pom.xml**文件中添加Spring Boot的邮件发送依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
**(3)**配置邮件服务器

在**application.propertiesapplication.yml**中配置邮件服务器的相关信息,例如:

(4)创建控制器:创建一个服务类来发送邮件,使用Spring Boot提供的**JavaMailSender**接口

@Component
public class MailService(
@Autowired
JavaMailSender javaMailSender;
public void sendSimpleMail (String from, String to, string cc,String subject, String content)SimpleMailMessage simpMsg = new simpleMailMessage ();simpMsg new SimpleMailMessage ( )simpMsg.setFrom(from);simpMsg.setTo(to):simpMsg.setCc(cc);simpMsg.setSubject(subject);simpMsg.setText (content);javaMailSender.send(simpMsg);}
} ![qwqw](https://i-blog.csdnimg.cn/direct/28c3f979e67f4abab03bc2ab850b2837.png#pic_center)

代码解释:

  • JavaMailSender是Spring Boot在 MailSenderPropertiesConfiguration类中配置好的,该类在Mail自动配置类 MailSenderAutoConfiguration 中导入,因此这里注入JavaMailSende就可以使用了。
  • sendSimpleMail 方法的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容。
  • 简单邮件可以直接构建一个 SimpleMailMessage 对象进行配置,配置完成后,通过JavaMailSender 将邮件发送出去。

配置完成后,在单元测试中写一个测试方法进行测试,代码如下 :

@RunWith(SpringRunner.class)
@Spring BootTest
public class SendmailApplicationTests{@AutowiredMailService mailService;@Testpublic void sendsimpleMail(){mailService.sendSimpleMail("youremail@qq.com","测试邮件主题","测试邮件内容);}
}

三.发送

(1)发送带附件的邮件:要发送一个带附件的邮件也非常容易,通过调用Atachment方法即可添加附件,该方法调用多次即可添加多个附件。在MailService 中添加如下方法:
public void sendAttachFileMail(String from, String to,String subject,String content,File file)(
try(MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper (message,true) ;helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content);helper.addAttachment(file.getName(),file);javaMailSender.send(message);} catch (MessagingException e){e.printStackTrace();}
}

这里使用 MimeMessageHelper 简化了邮件配置,它的构造方法的第二个参数true 表示构造impant mesage类型的邮件,mulipar message类型的邮件包含多个正文、附件以及内嵌资源件的表现形式更加丰富。最后通过addAtachment方法添加附件。在单元测试中添加如下方法进行测试:

@Test
public void sendAttachFileMail(){maiiService.sendAttachFileMail("youremail@qq.com","测试邮件主题","测试邮件内容",new File("文件路径"));
}
(2)发送带图片资源的邮件:有的邮件正文中可能要插入图片,使用FileSystemResource可以实现这一功能,代码如下:
public void sendMailwithImg(String from,String to,String subject,String content,String[] srcPath,String[] resIds){if(srcPath.length !=resIds.length){System.out.println("发送失败");return;}try {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper (message,true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content,true);for(int i = 0; i < srcPath.length; i++) {
FileSystemResource res = new FileSystemResource(new File(srcPath[i]));helper.addInline(resIds[i], res);}javaMailSender.send (message);} catch (MessagingException e){System.out.println("发送失败”);}
}

在发送邮件时分别传入图片资源路径和资源id,通过FileSystemResource 构造静态资源,然后调用 addInline 方法将资源加入邮件对象中。注意,在调用MimeMessageHelper中的setText方法时,第二个参数true表示邮件正文是HTML格式的,该参数不传默认为false。接下来在测试类中添加如下方法进行测试:

@Test
public void sendMailwithImg(){mai1Service,sendMailwithImg("1510161612@qq.com""5849918430gq.com""测试邮件主题(图片)","<div>he110,这是一封带图片资源的邮件:"+"这是图片1:<div><img src='cid:p0l'/></div>" +"这是图片2:<dv><img src='cid:p02'/></div>" +"</d±v>",new strigl("C:\Users\sang\Pictures\pl .png",C:\Users\sang\Pictures\p2 ,png" },new String{]("p01","p02"});
}

邮件的正文是一段HTML文本,用cid标注出两个静态资源,分别为p01和p02。

四.总结

Spring Boot支持异步邮件发送,可以通过@Async注解在服务类中异步发送邮件,这样可以避免在处理用户请求时被邮件发送操作阻塞。在邮件发送过程中,应该妥善处理可能出现的异常,比如网络问题、认证失败等,以确保应用的稳定性。由于邮件发送涉及到用户名和密码,确保这些敏感信息的安全是非常重要的。可以使用Spring Boot的配置属性替换功能来隐藏这些敏感信息,或者使用环境变量和秘密管理工具来管理。Spring Boot提供了一套完整的解决方案来集成邮件发送功能,使得开发者可以轻松地在应用中实现邮件通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16817.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】通过L496的HAL库Flash建立FatFS文件系统(CubeMX自动配置R0.12C版本)

【STM32】通过L496的HAL库Flash建立FatFS文件系统&#xff08;CubeMX自动配置R0.12C版本&#xff09; 文章目录 FlashFlash地址写Flash地址读 FatFS文件系统配置FatFS移植驱动函数时间戳函数 文件操作函数工作区缓存文件挂载和格式化测试文件读写测试其他文件操作函数 测试附录…

机械臂运动学笔记(一):正向运动学

正向运动学指的是通过相邻关节间的转动和移动坐标&#xff0c;将末端的坐标计算出来。 反向运动学指的是已知机械臂末端的坐标&#xff0c;反算每个关节可能的转动和移动参数。 参考资料&#xff1a;4.机械臂几何法与DH表示法_哔哩哔哩_bilibili 一.任意连杆连接的变量定义&a…

Leetcode - 周赛435

目录 一、3442. 奇偶频次间的最大差值 I二、3443. K 次修改后的最大曼哈顿距离三、3444. 使数组包含目标值倍数的最少增量四、3445. 奇偶频次间的最大差值 II 一、3442. 奇偶频次间的最大差值 I 题目链接 本题使用数组统计字符串 s s s 中每个字符的出现次数&#xff0c;然后…

鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)

文章目录 一、概述二、原理介绍三、使用规则四、复用类型详解1、标准型2、有限变化型2.1、类型1和类型2布局不同&#xff0c;业务逻辑不同2.2、类型1和类型2布局不同&#xff0c;但是很多业务逻辑公用 3、组合型4、全局型5、嵌套型 一、概述 组件复用是优化用户界面性能&#…

pyrender 渲染报错解决

pyrender渲染后&#xff0c;出来的图样子不对&#xff1a; 正确的图&#xff1a; 解决方法&#xff1a; pip install numpy1.26 下面的不是必须的&#xff1a; pip install pyrender0.1.45 os.environ["PYOPENGL_PLATFORM"] "egl" os.environ[EGL_DEVI…

CCFCSP第34次认证第一题——矩阵重塑(其一)

第34次认证第一题——矩阵重塑&#xff08;其一&#xff09; 官网链接 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 相关文件&#xff1a; 题目目录&#xff08;样例文件&#xff09; 题目背景 矩阵&#xff08;二维&#xff09;的重塑&#xff08;reshap…

Neurlps2024论文解读|BERTs are Generative In-Context Learners-water-merged

论文标题 BERTs are Generative In-Context Learners BERTs 是生成式上下文学习器 论文链接 BERTs are Generative In-Context Learners论文下载 论文作者 David Samuel 内容简介 本文探讨了掩码语言模型&#xff08;如DeBERTa&#xff09;在上下文学习中的生成能力&…

深入理解Java对接DeepSeek

其实&#xff0c;整个对接过程很简单&#xff0c;就四步&#xff0c;获取key&#xff0c;找到接口文档&#xff0c;接口测试&#xff0c;代码对接。 1.获取 KEY https://platform.deepseek.com/transactions 直接付款就是了&#xff08;现在官网暂停充值2025年2月7日&#xf…

OSPF高级特性(3):安全特效

引言 OSPF的基础我们已经结束学习了&#xff0c;接下来我们继续学习OSPF的高级特性。为了方便大家阅读&#xff0c;我会将高级特性的几篇链接放在末尾&#xff0c;所有链接都是站内的&#xff0c;大家点击即可阅读&#xff1a; OSPF基础&#xff08;1&#xff09;&#xff1a;工…

HCIA项目实践--静态路由的总结和简单配置

七、静态路由 7.1 路由器获取未知网段的路由信息&#xff1a; &#xff08;1&#xff09;静态路由&#xff1a;网络管理员手工配置的路由条目&#xff0c;它不依赖网络拓扑的变化进行自动更新&#xff0c;而是根据管理员预先设定的路径来转发数据包。其优点是配置简单、占用系…

3dtiles——Cesium ion for Autodesk Revit Add-In插件

一、说明&#xff1a; Cesium已经支持3dtiles的模型格式转换&#xff1b; 可以从Cesium官方Aesset中上传gltf等格式文件转换为3dtiles&#xff1b; 也可以下载插件&#xff08;例如revit-cesium插件&#xff09;转换并自动上传到Cesium官方Aseet中。 Revit转3dtiles插件使用…

HCIA项目实践---网络层次常见的三种模型

2.2 网络的层次 2.2.1 常见的三种网络层次划分 应用层 &#xff08;1&#xff09;OSI 七层模型 物理层&#xff1a;处于最底层&#xff0c;主要负责处理物理介质上的信号传输&#xff0c;如电缆、光纤、无线等。其作用是定义物理设备的接口标准、信号的编码方式、传输速率等&…

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案

建筑设计公司在项目执行过程中&#xff0c;会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求&#xff1a;为了方便内部管理和向客户交付完整的设计方案&#xff0c;公司需要将每个项目文件…

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略&#xff0c;早在2024年5月&#xff0c;推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体&#xff0c;为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来&#xff0c;亚信安全人工智能实验室利…

2024BaseCTF_week4_web上

继续&#xff01;冲冲冲 目录 圣钥之战1.0 nodejs 原型 原型链 原型链污染 回到题目 flag直接读取不就行了&#xff1f; 圣钥之战1.0 from flask import Flask,request import jsonapp Flask(__name__)def merge(src, dst):for k, v in src.items():if hasattr(dst, __geti…

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透&#xff1f;怎么解决&#xff1f;2. 你能介绍一下布隆过滤器吗&#xff1f;3. 什么是缓存击穿&#xff1f;怎么解决&#xff1f;4. 什么是缓存雪崩&#xff1f;怎么解决&#xff1f;5. redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&…

使用 Dockerfile 构建自定义 Nginx 镜像并集成 nginx_upstream_check_module

目录 1. 为什么需要自定义 Nginx 镜像&#xff1f; 2. Dockerfile 解析 2.1 基础镜像选择 2.2 安装依赖 2.3 下载并解压 Nginx 源码 2.4 应用补丁并编译 Nginx 2.5 暴露端口并设置启动命令 3. 构建并运行自定义 Nginx 镜像 3.1 构建镜像 3.2 运行容器 3.3 健康检测配…

Python办公自动化之PDF

python版本&#xff1a;3.13.1 开发工具&#xff1a;pycharm 安装三方库&#xff1a;pypdf2 、pdfplumber、pymupdf 一、从PDF中提取文字 用Python从PDF中提取文字-CSDN博客 二、从PDF中提取表格 用Python从PDF中提取表格-CSDN博客 三、拆分和合并PDF文件 用Python拆…

ds-download-link 插件:以独特图标选择,打造文章下载链接

源码介绍 “ds-download-link”插件为 WordPress 网站提供了在文章编辑器中添加下载链接的功能&#xff0c;每个下载链接都支持图标选择&#xff0c;并能将这些链接以美观的样式展示在文章前端页面。以下是该插件的主要特性和功能&#xff1a; 后台功能 在文章编辑器下方添加…