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();
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值