[推荐]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
	 */
	@Test
	public 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、

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现SpringBoot文件上传的功能,可以参考以下步骤: 1. 使用IDEA创建一个名为springboot-file的SpringBoot项目,将Package name改为com.example.springboot。同时导入Spring Web和Thymeleaf依赖。具体步骤可参考文章《IDEA中创建SpringBoot项目,并实现HelloWorld》的前三个步骤。 2. 下载SpringBoot开发脚手架的源码,该脚手架集合了各种常用框架使用案例,并提供了完善的文档,能够帮助开发者快速搭建基础环境并运行应用。该项目的源码可以在国内的gitee地址或者github地址进行下载。 3. 在src/main/resources文件夹下的application.properties文件中添加文件保存的路径,例如设置为filePath=E:/springboot_save_file/。这样上传的文件将会保存在指定的路径下。 通过参考以上步骤,您可以找到SpringBoot文件上传的源码实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringBoot实现文件上传和下载](https://blog.csdn.net/qq_55896432/article/details/127102250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Springboot实战:文件上传下载,代码精简(附git源码)](https://blog.csdn.net/qq_42411805/article/details/124721130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值