spring-boot-starter-mail 发送带附件的邮件信息

背景

  • 项目使用的事ruoyi低代码开发平台
  • ruoyi中有常见的web端下载excel的方式,但是这种方式是直接把输出流写到一个response中,而不是给一个outputstream,如果是给一个outputstream的话,就可以写入到一个固定的文件中去了

解决思路

  • 原本打算使用项目中自带的easyexcel框架,但是后来发现有和springboot集成的框架方案spring-boot-starter-mail
  • 将excel写入到本地或者服务器,使用邮件发送之后再删除
  • 需要注意的是:本地和服务器的盘符和路径不一致

引入依赖

  • 记得在common共用的模块中引入这个依赖,因为后续的工具类会写在这个模块下
<!--邮件-->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置

  • 这个有一个属性path ,这个不是spring-boot-starter-mail自带的属性,使我们自定义的属性,用于保存需要发送邮件的附件的位置
  • 这一块是tls加密,但是有一些服务器是不允许加密的,这块配置去掉就可以了在这里插入图片描述
spring:
  mail:
    host: smtp.qq.com   # 设置邮箱主机(服务商),这里使用QQ邮件服务器
    username: 1184266892@qq.com  # 设置用户名 - 发送方
    password: xjirjxexiadciafb   # 该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码
    path: @profile.email.path@  # 设置附件路径
    properties:
      mail:
        smtp:
          auth: true  # 必须进行授权认证,它的目的就是阻止他人任意乱发邮件
          starttls: #SMTP加密方式:连接到一个TLS保护连接
            enable: true
            required: true

@profile.email.path@ 动态路径

这个变量需要搭配profile环境文件使用,这里不详述了,可以搜索 多环境profile配置就可以找到相关内容
在admin的pom文件中,需要配置上述的邮件附件路径,不同环境的路径不同
在这里插入图片描述

邮件工具类

邮件工具类的链接

配置一个获取路径的工具类

  • @Component:被ioc容器识别
  • 路径定义成静态变量,方便静态方法获取
  • @Value 使用配置文件的属性,进行静态属性注入
@Component
@Getter
public class SysDirectoryUtil {
    private static String systemEmailDirectory;

    @Value("${spring.mail.path}")
    public void setSystemEmailDirectory(String emailDirectory) {
        SysDirectoryUtil.systemEmailDirectory = emailDirectory;
    }

    public static String getSystemEmailDirectory() {
        return systemEmailDirectory;
    }
}

使用示例

  1. 获取数据list
  2. 配置邮件相关配置
  3. 获取附件地址,存储excel
  4. 从指定位置获取附件,发送邮件
  5. 发送成功之后删除附件
// 获取最新的成本自动化和mes数据缺失的部分
List<MaterialInfo> materialInfos = materialInfoService.selectLastDataFormMes();


List<String> tos = new ArrayList<>();
tos.add("111@163.com");
tos.add("222@163.com");
String subject = "主题";
String content = "内容";
List<File> fileList = new ArrayList<>();

// 设置文件路径并存储文件
String systemEmailDirectory = SysDirectoryUtil.getSystemEmailDirectory();
// 获取时间戳
long time = System.currentTimeMillis();
String fileName = "新增物料信息_"+ time  +".xlsx";
// 创建文件
File file = new File(systemEmailDirectory ,  fileName);

// 将materialInfos 写入到file中
EasyExcel.write(file, MaterialInfo.class)
        .useDefaultStyle(true)
        .sheet("新增物料信息")
        .doWrite(materialInfos);

// 添加附件
if (size > 0){
    fileList.add(file);
    EmailHelper.sendEmailMassWithAttachment(tos,subject,content,fileList);
}

// 删除文件
file.delete();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

普源精电收购耐数电子——用“钞能力”拿下“量子”?

「量子市界」聚焦量子前沿&#xff0c;揭秘市场动态┃2024年4月30日&#xff0c;普源精电新增“量子科技”概念。 似乎一夜之间&#xff0c;新增“量子科技”概念的上市企业如雨后春笋般登场——普源精电就是其一。普源精电本就持有耐数电子32.26%股权&#xff0c;于4月2日发布…

飞天发布时刻|阿里云可观测全速演进

在数字化转型的浪潮中&#xff0c;云计算的深化应用不断推动着技术边界的扩展&#xff0c;而可观测性作为确保系统稳定运行与高效迭代的关键支撑&#xff0c;正逐渐成为现代云原生架构不可或缺的一部分。5 月 22 日 10:00&#xff0c;阿里云飞天发布时刻&#xff0c;阿里云应用…

【C++提高编程-03】----C++之STL常用容器基础实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【机器学习】必会降维算法之:t-分布邻域嵌入(t-SNE)

t-分布邻域嵌入&#xff08;t-SNE&#xff09; 1、引言2、随机梯度下降&#xff08;SGD&#xff09;2.1 简介2.1.1 定义2.1.2 应用场景 2.2 原理2.3 实现方式2.4 算法公式2.5 代码示例解析&#xff1a; 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 啥是降维算法 小鱼…

(二)可视化面板:Grafana的安装

其他相关文章 &#xff08;一&#xff09;一套开源的系统监控报警框架&#xff1a;Prometheus安装 什么是grafana Grafana是一个面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器。支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为…

【汽车操作系统】Autosar和商用OS

目录 什么是AUTOSAR? CP AUTOSAR架构 CAN通信 AP AUTOSAR 背景 CP&AP 开发方面的不同&#xff1a; WRLinux介绍 QNX介绍 什么是AUTOSAR? 随着汽车功能越来越多&#xff0c;导致ECU的数量越来越多。1993年的时候&#xff0c;奥迪A8才只有5个ECU现在典型的现代汽车…

用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见

在充满挑战的2024&#xff0c;企业如何以最小化的资源投入和试错成本&#xff0c;挖掘新的增长机会&#xff0c;实现确定性发展&#xff1f; “简单点”是当前商业环境的应对策略&#xff0c;也是奇点云2024 StartDT Day的核心理念。 5月28日&#xff0c;由奇点云主办的2024 S…

分享一个思路,使用插桩技术解决慢查询测试问题

前段时间&#xff0c;我负责测试的系统在生产环境运行出现问题。该系统对于响应时间要求较高&#xff0c;问题发生的时候并发很高&#xff0c;出现大量请求超时&#xff0c;超时请求比例随时间推迟越来越高&#xff0c;最后几乎全部请求都失败。滚动重启了所有进程后&#xff0…

Leetcode刷题2

文章目录 前言寻找两个正序数组的中位数1️⃣ 双指针快速排序2️⃣ 第k小数解法 Z 字形变换1️⃣ 个人解法2️⃣巧妙解法13️⃣巧妙解法2 字符串转换整数 (atoi)1️⃣ 常规方法2️⃣ 作弊方法&#x1f62b; 整数转罗马数字1️⃣ 常规方法&#xff1a;按照给定规则写出判断条件即…

ABB机器人手动模式切换自动模式时,速度自动更改为100%的解决办法

ABB机器人手动模式切换自动模式时,速度自动更改为100%的解决办法 如下图所示,手动切换到自动模式时,示教器上提示:速度将改为100%,但是我们正常使用时的速度可能不是100%,所以还需要手动去更改速度,不太方便。。。 解决办法可参考以下内容: 如下图所示,打开菜单—控制…

防火墙技术基础篇:解析防火墙的网络隔离机制

防火墙技术基础篇&#xff1a;解析防火墙的网络隔离机制 网络安全在现代社会中扮演着重要的角色&#xff0c;保护网络系统、用户和数据免受未经授权的访问、破坏和窃取。个人、企业和国家都需要加强网络安全意识&#xff0c;采取有效措施保护自身的网络安全。随着网络攻击手段…

Golang实现递归复制文件夹

代码 package zdpgo_fileimport ("errors""os""path/filepath""strings" )// CopyDir 复制文件夹 // param srcPath 源文件夹 // param desPath 目标文件夹 // return error 错误信息 func CopyDir(srcPath, desPath string) error {…

张量 t-product 积(matlab代码)

参考文献&#xff1a;Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3节中 t-product 的定义&#xff1a; 块循环矩阵&#xff1a; 参考知乎博主的例子及代码&#xff1a;&#xff08;t-product与t-QR分解&#xff0c;另一篇傅里叶对…

200smart【编程入门】

说明 编程时&#xff0c;遇到困难就按【F1】 【I】输入 200smart 上限 i0.0~i31.7 255bit【255个输入点】 i0.0~i31.7 八进制 【布尔 bool 】 ib0~ib127 【单字节】 8bit iw0~iw127 …

六零导航页 file.php 任意文件上传漏洞复现(CVE-2024-34982)

0x01 产品简介 LyLme Spage(六零导航页)是中国六零(LyLme)开源的一个导航页面。致力于简洁高效无广告的上网导航和搜索入口,支持后台添加链接、自定义搜索引擎,沉淀最具价值链接,全站无商业推广,简约而不简单。 0x02 漏洞概述 六零导航页 file.php接口处任意文件上传…

Java面试八股之++操作符是线程安全的吗

操作符是线程安全的吗 操作符本身在Java中并不是线程安全的。这个操作实际上包含三个步骤&#xff1a;读取变量的值、将值加1、然后将新值写回内存。在多线程环境下&#xff0c;如果多个线程同时对同一个变量执行操作&#xff0c;就可能出现竞态条件&#xff08;race conditio…

TransFormer学习之基础知识:STN、SENet、CBAM、Self-Attention

1.空间注意力机制STN 参考链接&#xff1a;STN(Spatial Transformer Networks) 参考链接&#xff1a;通俗易懂的Spatial Transformer Networks(STN) 核心动机&#xff1a; 在空间中捕获重要区域特征(如图像中的数字)&#xff0c;将核心区域进行放大居中&#xff0c;使得结果更…

K8S认证|CKA题库+答案| 7. 调度 pod 到指定节点

7、调度 pod 到指定节点 您必须在以下Clusterd/Node上完成此考题&#xff1a; Cluster Master node Worker node hk8s master …

GS5812G 21V、2A同步降压DC/DC转换器芯片IC

一般描述 该GS5812G是一个同步降压DC/DC转换器与快速恒定的时间(FCOT)模式控制。该器件提供4. 5V至21V的输入电压范围和2A连续负载电流能力。它是恒定时间脉宽调制(PWM)控制器&#xff0c;支持 FCOT模式控制。工作频率取决于输入和输出电压条件。 该GS5812G故障…

桌面藏线大法

1有线改无线&#xff1a; 蓝牙鼠标 蓝牙键盘 蓝牙耳机 2将排插贴到桌子底下 购物软件上搜 3断舍离 不要的电子产品统统扔掉 4 洞洞板和挂钩 这个不用介绍了