[推荐]SpringBoot,邮件发送附件含Excel文件(含源码)。
在阅读本文前,可以先阅读我的上一篇文章: SpringBoot,使用JavaMailSender发送邮件(含源码)。 ,本文使用的代码案例涉及到的 jar包、application.properties配置与它相同。
先看一下效果。

图一

图二
在下方代码案例中,我使用 Hutool 工具包生成Excel文件,并将其转化成 InputStream流,之后生成对应的 javax.mail.util.ByteArrayDataSource,添加到邮件附件中。需要说明的是,邮件附件中Excel文件后缀名目前只支持 “.xls”,不支持 “.xlsx” 。
获取 Excel文件输入流工具函数
/*** 获取 Excel文件输入流.** @param sourceList 数据来源集合* @param beanClass 导出文件类型.** @return java.io.InputStream* @author DY41220 2023/10/18 14:58*/public static <T, K> ByteArrayInputStream getExcelInputStream(List<T> sourceList, Class<K> beanClass) {Assert.isFalse(CollectionUtils.isEmpty(sourceList), "源数据为空,异常!");List<K> exportVOS = sourceList.stream().map(infoVO -> MyBeanUtils.convert(infoVO, beanClass)).collect(Collectors.toList());Assert.isFalse(CollectionUtils.isEmpty(exportVOS), "转换后导出的数据为空,异常!");// Map<'英文名', '中文名'> 组合形式.Map<String, String> aliasMap = ExcelUtils.getDTOAliasTitle(beanClass, Constant.BooleanFlag.FALSE);ExcelWriter writer = ExcelUtils.initExcelWriter(exportVOS, aliasMap);ByteArrayOutputStream outputStream = new ByteArrayOutputStream();writer.flush(outputStream, Constant.BooleanFlag.TRUE);ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());return inputStream;}
邮件附件中含Excel文件,进行发送。
/*** 邮件附件中含Excel文件,进行发送。** @return void* @author moon 2023/10/18 17:10*/@Testpublic void sendExcelAttachmentsMail() {// 1、数据简单封装User user1 = new User(1L, "张三", 20, new Date());User user2 = new User(5L, "李四", 21, new Date());User user3 = new User(6L, "王五", 18);List<User> targetVOList = Arrays.asList(user1, user2, user3);// 2、获取 Excel文件输入流ByteArrayInputStream inputStream = ExcelUtils.getExcelInputStream(targetVOList, UserExportVO.class);// 3、设置 邮件附件名String attachmentFilename = "用户错误数据" + DateUtil.format(new Date(), Constant.DatePattern.PURE_DATETIME_PATTERN) + Constant.ExcelProperty.XLS_SUFFIX;// 4、构建 邮件发送DTO对象EmailDTO emailDTO = new EmailDTO(new String[] {"12345678@qq.com"}, "邮件附件中含Excel文件测试", "这是一个测试,祝自己早日学有所成。", attachmentFilename, inputStream);// 5、发送邮件sendAttachmentsMail(emailDTO);log.info("邮件附件中含Excel文件,邮件发送成功~~~~~");}/*** 邮件附件,发送消息。** @param emailDTO* @return void* @author DY41220 2023/10/18 14:43*/public void sendAttachmentsMail(EmailDTO emailDTO) {Assert.isFalse(Objects.isNull(emailDTO.getToArray()),"必须设置收件人!");//获取MimeMessage对象MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper messageHelper;try {messageHelper = new MimeMessageHelper(message, true);// 邮件发送人messageHelper.setFrom(from);// 邮件接收人messageHelper.setTo(emailDTO.getToArray());// 邮件主题message.setSubject(emailDTO.getSubject());// 邮件内容,html格式messageHelper.setText(emailDTO.getText(), Constant.BooleanFlag.TRUE);ByteArrayDataSource file = new ByteArrayDataSource(emailDTO.getInputStream(), Constant.HttpMessage.HTTP_SERVLET_RESPONSE_EXCEL_CONTENT_TYPE);// 附件messageHelper.addAttachment(MimeUtility.encodeWord(emailDTO.getAttachmentFilename(), Constant.HttpMessage.UTF_LOWER,"B"), file);// 发送mailSender.send(message);//日志信息log.info("邮件已经发送。");} catch (Exception e) {log.error("发送邮件时发生异常!", e);}}
源码路径: springboot-mail 项目 ,SpringBoot2.x--翟永超/springboot-mail 项目中,参考 com.moon.EmailApplicationTests 单元测试类。
参考文章:
1、SpringBoot,使用JavaMailSender发送邮件(含源码)。
2、Java后台生成Excel文件并作为邮件附件发送
3、
相关文章:
[推荐]SpringBoot,邮件发送附件含Excel文件(含源码)。
在阅读本文前,可以先阅读我的上一篇文章: SpringBoot,使用JavaMailSender发送邮件(含源码)。 ,本文使用的代码案例涉及到的 jar包、application.properties配置与它相同。 先看一下效果。 图一 图二 在下方代码案例中,…...
node学习之包管理器
一、概念介绍 **1.1 包是什么 ** 『包』英文单词是 package ,代表了一组特定功能的源码集合 **1.2 包管理工具 ** 管理『包』的应用软件,可以对「包」进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具&…...
自动驾驶车辆轨迹跟踪
相对于传统的模型预测控制(MPC),简化的车辆模型通常会导致预测结果不准确,这对车辆的转弯等行为具有负面影响。因此作者提出了一种轨迹规划和跟踪框架: 该框架应用人工势场来获得目标轨迹;并利用具有PID反…...
React的useEvent 和 ahooks 的 useMemorizedFn 的深度分析和对比
父组件 const TestParent: React.FC<any> () > {const [State, setState] useState(0);const changeFun useCallback(() > {console.log(useCallback closure 里的 State, State);}, [State]);const changeFun_useEvent useEvent(() > {console.log(useEv…...
基于goframe2.5.4、vue3、tdesign-vue-next开发的全栈前后端分离的管理系统
goframe-admin goframe-admin V1.0.0 平台简介 基于goframe2.5.4、vue3、tdesign-vue-next开发的全栈前后端分离的管理系统。前端采用tdesign-vue-next-starter 、vue3、pinia、tdesign-vue-next。 特征 高生产率:几分钟即可搭建一个后台管理系统认证机制&#x…...
LInux之在同一Tomcat下使用不同的端口号访问不同的项目
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《LInux实战开发》。🎯🎯 …...
梦百合上榜2023鼎革奖数字化转型先锋榜
10月26日,第六届“鼎革奖”数字化转型先锋榜单揭晓,梦百合家居凭借数字化生产的卓越成果——SAP管理平台及供应链项目,入选2023【鼎革奖】数字化转型先锋榜年度供应链转型典范,梦百合家居COO 崔慧明同步入选2023【鼎革奖】数字化转型先锋榜年度首席运营官。 据了解,「鼎革奖」数…...
沉痛悼念科研分公司
今天上班途中,遇到了上家公司的同事王强。他正准备去体检中心体检。几句寒暄之后,得知他是要入职选煤公司了。 我们所在的公司比较大,总公司下设有几十个分、子公司,我和他曾经在一家子公司——科研分公司。现在的科研分公司解散…...
Django的网站项目开发好了,该用何种方案在Centos上部署【答:Gunicorn(uWSGI)+Nginx】
问:用Django开发的网站开发好了,现在要部署上线。 系统为Centos 7.x 现在我安装好Django和相关依赖后,我用命令 python manage.py runserver 127.0.0.1:8010 启动Django 然后安装配置好Nginx,并把用的请求转发到 127.0.0.1:8010 。 请问这样的…...
基于PyTorch的中文情绪分析器设计与开发
收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、相关基础理论2.1 主流深度学习框架2.2 神经网络2.2.1 神经网络基础 二、中文情感分类模型构建3.1 开发环境3.2 数据部分3.3 文本特征提取3.3.1、过滤标点符号3.3.2 中文分词、单词过滤 三 运行结果与分析五 结…...
HT5010 音频转换器工作原理
HT5010是一款低成B的立体声DA转换器,内部集成了内插滤波器、DA转换器和输出模拟滤波等电路。其可支持多种音频数字输入格式,支持24-bit字节。 该HT5010 基于一个多比特位的Δ-Σ调制器,将数字信号转化成两个声道的模拟信号并经过模拟滤波器滤…...
ubuntu18.04如何更新到22.04
将linux系统中的Ubuntu 18.04更新到22.04,按照以下步骤操作: 打开终端并更新系统,使用以下命令: sudo apt update sudo apt upgrade sudo apt dist-upgrade 确保系统是最新的,然后备份数据,以防万一。执…...
嵌入式软件开发:第二部分–七个步骤计划
使用一种工具(仅一种工具)武装自己,您可以在下一个嵌入式项目的质量和交付时间上做出巨大的改进。点击领取嵌入式物联网学习路线 该工具是:绝对承诺对开发代码的方式进行一些小而基本的更改 。 有了改变的意志,今天您…...
什么是IPA,和RPA有啥区别和联系?
∵ IPA中包含了RPA的“PA”,AI的“I” ∴IPARPAAI,等式成立! AI:或人工智能,是一种复杂的计算机技术,旨在模仿人类智能行为和决策的能力。它涵盖了多种技术和方法,包括:机器学习&am…...
内涝积水监测仪怎么样?万宾科技城市内涝积水监测的作用
在城市建设发展过程中,道路基础设施的建设永远都占据着重要一席,因为人们出行一旦受阻便会影响城市进展,也会影响经济发展。在城市之中有隧道,下穿式立交桥等容易存积水的地方,一旦出现恶劣暴雨天气,这些地…...
【java】命令行,包
文件夹情况: HelloWorld.java package com.demo; public class HelloWorld{public static void print(){System.out.println("HelloWorld!");}public static void main(String[] args){print();} } import.java import com.demo.HelloWorld; public cla…...
Generative AI 新世界 | 文生图(Text-to-Image)领域论文解读
在上期文章,我们开始探讨生成式 AI(Generative AI)的另一个进步迅速的领域:文生图(Text-to-Image)领域。概述了 CLIP、OpenCLIP、扩散模型、DALL-E-2 模型、Stable Diffusion 模型等文生图(Text…...
03.从简单的sql开始
从简单的sql开始 一、sql语句的种类二、oracle的工作原理三、oracle数据库常见基础命令 一、sql语句的种类 下面是SQL语句的分类、常用语句、使用方法: 分类语句使用方法解释数据查询SELECTSELECT column1, column2, … FROM table_name WHERE condition;用于从表…...
JS加密/解密之jsjiami在线js加密的效率问题
故事背景 经常有客户反馈,v7加密的效率比v6低,但是安全性更好。这里我给大家科普一下关于jsjiami的优化诀窍。 示例源代码 // 伪代码 while (1) {var name ‘张三’ }优化后 var _name 张三; while (1) {var name _name }优化原理 相信很多朋…...
解决【spring boot】Process finished with exit code 0的问题
文章目录 1. 复现错误2. 分析错误3. 解决问题 1. 复现错误 今天从https://start.spring.io下载配置好的spring boot项目: 启动后却报出如下错误: 即Process finished with exit code 0 2. 分析错误 Process finished with exit code 0翻译成中文进程已完…...
OpenClaw家庭作业助手:Qwen3-14B解析数学题并分步讲解
OpenClaw家庭作业助手:Qwen3-14B解析数学题并分步讲解 1. 为什么需要家庭作业助手? 作为一个经常辅导孩子功课的家长,我深刻体会到传统辅导方式的痛点。每天晚上检查作业时,孩子遇到不会的题目需要等待家长解答,而家…...
I2C总线原理与嵌入式系统应用实践
1. I2C总线基础解析I2C(Inter-Integrated Circuit)总线是Philips半导体(现NXP)在1982年推出的双线制串行通信协议。作为一名电子工程师,我在多个嵌入式项目中都深度使用过这种总线。它的精妙之处在于仅用两根线&#x…...
三线制SPI通信原理与ZYNQ实现方案
1. 三线制SPI通信的背景与应用场景 在嵌入式系统设计中,SPI(Serial Peripheral Interface)总线是最常用的通信接口之一。传统四线制SPI包含SCLK(时钟)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)和SS(片选)四条信号线。但在某些特定应用场景下,为…...
别再只调参了!深入torchvision.datasets.CIFAR10源码,理解PyTorch数据加载的设计哲学
深入torchvision.datasets.CIFAR10源码:解码PyTorch数据加载的工程美学 当你第一次在PyTorch中写下torchvision.datasets.CIFAR10(root./data)这行代码时,是否想过这简单的调用背后隐藏着怎样的设计智慧?对于已经能够熟练调用各种数据集接口的…...
BeMusic 3.1.3音乐网站源码:打造个人专属音乐平台的完美选择
在当今数字音乐时代,拥有一个属于自己的音乐网站已成为许多音乐爱好者和开发者的梦想。BeMusic 3.1.3音乐网站源码正是实现这一梦想的理想工具。作为一个功能全面的音乐分享和流媒体平台,BeMusic允许用户在几分钟内创建专业级的音乐网站,无需…...
3款免费MySQL客户端实测对比:DBeaver、WorkBench、HeidiSQL哪个更适合你?
三款开源MySQL客户端深度横评:从安装到高阶功能的全方位指南 当Navicat的收费模式成为团队协作或个人开发的负担时,开发者们往往需要寻找功能相当但零成本的开源替代品。本文将基于实际工程经验,对DBeaver、MySQL Workbench和HeidiSQL这三款主…...
终极浏览器自由方案:如何让Windows真正尊重你的默认浏览器选择
终极浏览器自由方案:如何让Windows真正尊重你的默认浏览器选择 【免费下载链接】EdgeDeflector A tiny helper application to force Windows 10 to use your preferred web browser instead of ignoring the setting to promote Microsoft Edge. Only runs for a m…...
AI辅助开发新思路:告诉快马你的需求,自动生成图形化MobaXterm工具
今天想和大家分享一个用AI辅助开发的小技巧——如何快速生成一个图形化的MobaXterm工具。作为一个经常需要管理远程服务器的开发者,我一直在寻找更高效的工作方式。最近在InsCode(快马)平台上尝试了AI辅助开发,发现它真的能大幅提升开发效率。 需求分析 …...
实战应用:基于快马平台快速开发stl学生成绩管理系统
最近在做一个学生成绩管理的小工具,正好用到了C STL的一些实用组件,感觉特别适合分享给需要快速开发类似功能的朋友。这个项目完全可以在InsCode(快马)平台上快速实现和测试,下面我就把具体实现思路和关键点整理出来。 数据结构设计 首先定义…...
避坑指南:Ubuntu 20.04下Carla 0.9.14打包版安装全流程(含Python 3.7虚拟环境配置)
Ubuntu 20.04下Carla 0.9.14打包版安装避坑指南:从零到完美运行 作为一名长期在自动驾驶仿真领域摸爬滚打的开发者,我深知Carla安装过程中的各种"暗礁"。特别是在Ubuntu 20.04这个"不上不下"的版本上,官方文档的某些指导…...
