Spring boot 发送邮箱

一、简介

        Spring 提供了非常好用的 JavaMailSender 接口实现邮件发送。在 SpringBoot 的 Starter 模块中也为此提供了自动化配置。下面通过实例看看如何在 SpringBoot 中使用 JavaMailSender 发送邮件。

 org.springframework.mail 是Spring Framework对邮件支持的基础包,发送邮件的核心接口MailSender,SimpleMailMessage封装了发送简单邮件的属性 ,这个包还包含检查异常的层次结构,这些层次结构在较低级别的邮件系统异常上提供了更高级别的抽象,而根异常是MailException

org.springframework.mail.javamail.JavaMailSender接口添加了专门的JavaMail功能,例如MIME消息支持到MailSender接口 (从其继承)。JavaMailSender还提供了一个名为org.springframework.mail.javamail.MimeMessagePreparator的回调接口,用于准备一个MimeMessage。

二、使用 SpringBoot 创建 Java Web 项目,添加邮件相关依赖包

  在 SpringBoot 工程中的 pom.xml 中引入 spring-boot-starter-mail 依赖。

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

三、使用

假设我们有一个名为OrderManager的业务类,如下面的示例所示:

public interface OrderManager {void placeOrder(Order order) throws MessagingException;
}

3、1MailSender和SimpleMailMessage的基本用法

public class SimpleOrderManager implements OrderManager {@Value("${spring.mail.from}")private String mailFrom;@Resourceprivate MailSender mailSender;public void placeOrder(Order order) {// Do the business calculations...// Call the collaborators to persist the order...// Create a thread safe "copy" of the template message and customize itSimpleMailMessage msg = new SimpleMailMessage();msg.setTo(order.getCustomer().getEmailAddress());msg.setFrom(mailFrom);msg.setText("Dear " + order.getCustomer().getFirstName()+ order.getCustomer().getLastName()+ ", thank you for placing order. Your order number is "+ order.getOrderNumber());try {this.mailSender.send(msg);} catch (MailException ex) {// simply log it and go on...System.err.println(ex.getMessage());}}}

3.2 JavaMailSender 和MimeMessagePreparator的用法

@Service
public class SimpleOrderManagerPreparator implements OrderManager {@Value("${spring.mail.from}")private String mailFrom;@Resourceprivate JavaMailSender mailSender;public void setMailSender(JavaMailSender mailSender) {this.mailSender = mailSender;}@Overridepublic void placeOrder(final Order order) {// Do the business calculations...// Call the collaborators to persist the order...MimeMessagePreparator preparator = new MimeMessagePreparator() {public void prepare(MimeMessage mimeMessage) throws Exception {mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(order.getCustomer().getEmailAddress()));mimeMessage.setFrom(new InternetAddress(mailFrom));mimeMessage.setText("Dear " + order.getCustomer().getFirstName() + " " +order.getCustomer().getLastName() + ", thanks for your order. " +"Your order number is " + order.getOrderNumber() + ".");}};try {this.mailSender.send(preparator);} catch (MailException ex) {// simply log it and go on...System.err.println(ex.getMessage());}}}

邮件代码可以作为一个切面,可以在OrderManager目标上的适当连接点处运行。

3.3 JavaMail MimeMessageHelper的使用

使用MimeMessageHelper可以代替基础的JavaMail API。

@Service
public class SimpleOrderManagerHelper  implements OrderManager {@Value("${spring.mail.from}")private String mailFrom;@Resourceprivate JavaMailSender mailSender;public void placeOrder(Order order) throws MessagingException {// Do the business calculations...// Call the collaborators to persist the order...// Create a thread safe "copy" of the template message and customize itMimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message);helper.setTo(order.getCustomer().getEmailAddress());helper.setFrom(mailFrom);helper.setText("Dear " + order.getCustomer().getFirstName()+ order.getCustomer().getLastName()+ ", thank you for placing order. Your order number is "+ order.getOrderNumber());try {this.mailSender.send(message);} catch (MailException ex) {// simply log it and go on...System.err.println(ex.getMessage());}}
}

3.4 发送附件

下面的示例将展示如何使用MimeMessageHelper发送带有单个JPEG图像附件的电子邮件:

@Service
public class SimpleOrderManagerAttachments implements OrderManager {@Value("${spring.mail.from}")private String mailFrom;@Resourceprivate JavaMailSender mailSender;public void placeOrder(Order order) throws MessagingException {// Do the business calculations...// Call the collaborators to persist the order...// Create a thread safe "copy" of the template message and customize itMimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setTo(order.getCustomer().getEmailAddress());helper.setFrom(mailFrom);helper.setText("Check out this image!");// let's attach the infamous windows Sample file (this time copied to c:/)FileSystemResource file = new FileSystemResource(new File("./sample.png"));helper.addAttachment("CoolImage.jpg", file);try {this.mailSender.send(message);} catch (MailException ex) {// simply log it and go on...System.err.println(ex.getMessage());}}
}
发送附件和内联资源
多部分电子邮件消息允许附件和内联资源。内联资源的示例包括要在邮件中使用但不想显示为附件的图像或样式表。
附件
下面的示例向您展示如何使用MimeMessageHelper发送带有单个JPEG图像附件的电子邮件:

3.5 内联资源

下面的示例将展示如何使用MimeMessageHelper发送带有内联映像的电子邮件:

@Service
public class SimpleOrderManagerInlineResources implements OrderManager {@Value("${spring.mail.from}")private String mailFrom;@Resourceprivate JavaMailSender mailSender;public void placeOrder(Order order) throws MessagingException {// Do the business calculations...// Call the collaborators to persist the order...// Create a thread safe "copy" of the template message and customize itMimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setTo(order.getCustomer().getEmailAddress());helper.setFrom(mailFrom);helper.setText("<html><body><img src='cid:identifier1234'></body></html>", true);// let's attach the infamous windows Sample file (this time copied to c:/)FileSystemResource res = new FileSystemResource(new File("./sample.png"));helper.addInline("identifier1234", res);try {this.mailSender.send(message);} catch (MailException ex) {// simply log it and go on...System.err.println(ex.getMessage());}}
}

        通过使用指定的Content-ID 将内联资源添加到MimeMessage。添加文本和资源的顺序非常重要。请务必先添加文本,然后再添加资源。如果您以相反的方式进行操作,则无法正常工作。

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

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

相关文章

云计算大屏,可视化云计算分析平台(云实时数据大屏PSD源文件)

大屏组件可以让UI设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享可视化云分析系统、可视化云计算分析平台、云实时数据大屏的大屏Photoshop源文件&#xff0c;开箱即用&#xff01; 若需 更多行业 相关的大屏&#xff0c;请移步小7的另一篇文章&#…

mapstruct个人学习记录

mapstruct核心技术学习 简介入门案例maven依赖 IDEA插件单一对象转换测试结果 mapping属性Spring注入的方式测试 集合的映射set类型的映射测试map类型的映射测试 MapMappingkeyDateFormatvalueDateFormat 枚举映射基础入门 简介 在工作中&#xff0c;我们经常要进行各种对象之…

非标识性参数—手机运营商

2.2 非标识性参数 2.2.1 手机运营商 IMSI&#xff1a; 国际移动用户识别码&#xff0c;共有15位&#xff0c;储存在SIM卡中&#xff0c;由MCC、MNC&#xff0c;MSIN组成。 MCC&#xff1a; (国家)移动国家号码&#xff0c;由3位数字组成&#xff0c;唯一的识别移动客户所属的…

【rabbitMQ】rabbitMQ用户,虚拟机地址(添加,修改,删除操作)

rabbitMQ的下载&#xff0c;安装和配置 https://blog.csdn.net/m0_67930426/article/details/134892759?spm1001.2014.3001.5502 rabbitMQ控制台模拟收发消息 https://blog.csdn.net/m0_67930426/article/details/134904365?spm1001.2014.3001.5502 目录 用户 添加用户…

MyBatis 四大核心组件之 StatementHandler 源码解析

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

CPU设计——Triumphcore——MP_work版本

该版本用作系统寄存器的实现&#xff0c;M/S/U状态的实现与切换&#xff0c;以及load/store的虚实地址转换 设计指标 2023.12.8 2023.12.9 不实现mideleg和medeleg&#xff0c;因此一旦出现异常&#xff0c;直接切换至M态&#xff0c; 调试记录 到存储区中取PTE要额外至少…

airserver mac 7.27官方破解版2024最新安装激活图文教程

airserver mac 7.27官方破解版是一款好用的airplay投屏工具&#xff0c;可以轻松将ios荧幕镜像&#xff08;airplay&#xff09;至mac上&#xff0c;在mac平台上实现视频、音频、幻灯片等文件资源的接收及投放演示操作&#xff0c;解决iphone或ipad的屏幕录像问题&#xff0c;满…

SpringBootAdmin设置邮件通知

如果你想要在Spring Boot Admin中配置邮件通知&#xff0c;可以按照以下步骤进行操作&#xff1a; 添加邮件通知的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dep…

Linux C/C++ 从内存转储中恢复64位ELF可执行文件

ELF&#xff08;Executable and Linking Format&#xff09;是一种对象文件的格式&#xff0c;它主要用于定义ELF&#xff08;Executable and Linking Format&#xff09;是一种对象文件的格式&#xff0c;它主要用于定义不同类型的对象文件中的内容以及它们的存储方式。一个EL…

作业调度算法(含详细计算过程)和进程调度算法浅析

一.作业调度 作业调度算法需要知道以下公式 周转时间完成时间 - 到达时间 带权周转时间周转时间/运行时间 注&#xff1a;带权周转时间越大&#xff0c;作业&#xff08;或进程&#xff09;越短&#xff1b;带权周转时间越小&#xff0c;作业&#xff08;或进程&#xff09;越…

[git] 远程删除分支

[git] 远程删除分支 1. git删除远程分支 git push origin --delete [branch_name]2. 删除本地分支区别 git branch -d 会在删除前检查merge状态&#xff08;其与上游分支或者与head&#xff09;。git branch -D 是git branch --delete --force的简写&#xff0c;它会直接删除…

Redis生产实战-Redis集群故障探测以及降级方案设计

Redis 集群故障探测 在生产环境中&#xff0c;如果 Redis 集群崩溃了&#xff0c;那么会导致大量的请求打到数据库中&#xff0c;会导致整个系统都崩溃&#xff0c;所以系统需要可以识别缓存故障&#xff0c;限流保护数据库&#xff0c;并且启动接口的降级机制 降级方案设计 …

《C++20设计模式》---原型模式学习笔记代码

C20设计模式 第 4 章 原型模式学习笔记笔记代码 第 4 章 原型模式 学习笔记 笔记代码 #include<iostream> #include<string>// #define VALUE_OF_ADDRESS // PP_4_2_1 (no define: PP_4_2_2) namespace PP_4_2 {class Address{public:std::string street;std::st…

《C++20设计模式》学习笔记---原型模式

C20设计模式 第 4 章 原型模式4.1 对象构建4.2 普通拷贝4.3 通过拷贝构造函数进行拷贝4.4 “虚”构造函数4.5 序列化4.6 原型工厂4.7 总结4.8 代码 第 4 章 原型模式 考虑一下我们日常使用的东西&#xff0c;比如汽车或手机。它们并不是从零开始设计的&#xff0c;相反&#x…

超过 50% 的内部攻击使用特权提升漏洞

特权提升漏洞是企业内部人员在网络上进行未经授权的活动时最常见的漏洞&#xff0c;无论是出于恶意目的还是以危险的方式下载有风险的工具。 Crowdstrike 根据 2021 年 1 月至 2023 年 4 月期间收集的数据发布的一份报告显示&#xff0c;内部威胁正在上升&#xff0c;而利用权…

基于SSM的剧本杀预约系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

【第三届】:“玄铁杯”RISC-V应用创新大赛(基于yolov5和OpenCv算法 — 智能警戒哨兵)

文章目录 前言 一、智能警戒哨兵是什么&#xff1f; 二、方案流程图 三、硬件方案 四、软件方案 五、演示视频链接 总结 前言 最近参加了第三届“玄铁杯”RISC-V应用创新大赛&#xff0c;我的创意题目是基于 yolov5和OpenCv算法 — 智能警戒哨兵 先介绍一下比赛&#xf…

docker容器配置MySQL与远程连接设置(纯步骤)

以下为ubuntu20.04环境&#xff0c;默认已安装docker&#xff0c;没安装的网上随便找个教程就好了 拉去mysql镜像 docker pull mysql这样是默认拉取最新的版本latest 这样是指定版本拉取 docker pull mysql:5.7查看已安装的mysql镜像 docker images通过镜像生成容器 docke…

大数据HCIE成神之路之数据预处理(1)——缺失值处理

缺失值处理 1.1 删除1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 填充1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析 1.2.2 实验思路1.2.3 实验操作步骤1.2.4 结果验证 1…

【STM32】ADC模数转换器

1 ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 STM32是数字电路&#xff0c;只有高低电平&#xff0c;没有几V电压的概念&#xff…