Javamail发送Excel附件具体实现

在我写大学生高考志愿填报的时候,将推荐出来的专业表的信息发送到指定的账户的邮件中

下面代码的实现讲解:

  • 首先创建配置文件,配置邮箱账户的信息
  • 配置用于生成表格的实体类,实体类中的信息就对应着Excel表中的信息
  • 逻辑的具体实现:
    • 首先从Cookie中获取账户的邮箱信息,(我在cookie中只存了账户的邮箱号,没有帐户其他的信息)。
    • 获取我查询结果的datas
    • 将datas封装成Excel表格
    • 发送带有Excel表格的邮件
    • 将本地的Excel表格删除掉
application.yml:
java 复制代码
spring:
  mail:
    host: smtp.qq.com
    username: 2asdfasdf7@qq.com
    password: asdoighwakjfns
    properties:
      mail:
        smtp:
          ssl:
            enable: true
entity层:(实体类中的血法)
java 复制代码
@Getter
@Setter
@TableName("t_pitch")
public class Pitch implements Serializable {
    private static final long serialVersionUID = 1L;
    @ExcelIgnore
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 院校代号
     */
    @ExcelProperty("院校代号")
    @TableField("schoolCode")
    private String schoolCode;
    /**
     * 学校名称
     */
    @ExcelProperty("学校名称")
    @TableField("schoolName")
    private String schoolName;
    /**
     * 专业代号
     */
    @ExcelProperty("专业代号")
    @TableField("pCode")
    private String pCode;
    /**
     * 专业名称
     */
    @ExcelProperty("专业名称")
    @TableField("pName")
    private String pName;
    /**
     * 最低投档分数
     */
    @ExcelProperty("最低投档分数")
    @TableField("lowestScore")
    private String lowestScore;
    /**
     * 最低投档位次
     */
    @ExcelProperty("最低投档位次")
    @TableField("lowestRank")
    private String lowestRank;
}
controller层代码:
java 复制代码
@RequestMapping("/sendExcel")
@ResponseBody
public void sendExcel(HttpServletRequest request, HttpServletResponse response) throws MessagingException {
    //1、获取cookie中的邮箱信息
    Cookie[] cookies = request.getCookies();
    for(Cookie cookie:cookies){
        if(cookie.getName().equals("email")){
            email1 = cookie.getValue();
            break;
        }
    }
    //2、获取表中的信息 datas,然后生成xlsx
    //写文件:
    String tempFilePath=PATH+"专业推荐表.xlsx";
    EasyExcel.write(tempFilePath,Pitch.class)
            .sheet("统计表1")
            .doWrite(datas);
    //3、发送信息
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message,true);
    helper.setFrom("211111111@qq.com");
    helper.setTo(email1);
    helper.setSubject("邮件发送数据");
    helper.setText("以下是为您导出的专业推荐表");

    File file = new File(tempFilePath);
    DataSource source= new FileDataSource(file);
    helper.addAttachment(file.getName(),source);
    javaMailSender.send(message);
    boolean delete = file.delete();
    if (delete) {
        System.out.println("Temporary file deleted successfully.");
    } else {
        System.out.println("Failed to delete temporary file.");
    }


}
相关推荐
小宋10215 小时前
SQL + RAG 混合问答实战:结构化指标与文档证据如何统一路由
java·jvm·人工智能·sql
bro_Java6665 小时前
链表进阶2:双向链表的构建
java·数据结构·链表
DianSan_ERP6 小时前
多平台订单自动下载与回传的技术实现:从消息推送到状态闭环引言
java·linux·服务器·前端·网络·架构·自动化
Joe_Wang56 小时前
【从0到1学习JVM · 13】点进JDK源码只有一个分号?搞懂本地方法栈与JNI机制
java·jvm·学习·本地方法栈
AI 算法大模型备案~当当6 小时前
各地备案数量怎么看:一份属地公告的认读与台账方法
java·数据库·人工智能
智鸟科技GemeOpen开发者智能设备6 小时前
GemeOpen 智能音箱 GSSM0B - 播放控制(Java示例)
java·开发语言·智能音箱
今天的砖头有点烫手啊7 小时前
Java IO/NIO/AIO 演进:从 BIO 到 Netty 的底层逻辑
java·jvm·nio
谢亮_vipxieliang7 小时前
Java 21 新特性实战:Record、Sealed、模式匹配
java·开发语言
霸道流氓气质7 小时前
LLM 应用限流与熔断机制完全指南:从多层防护架构到Java生产级弹性实战
java·开发语言·架构
SensorFlow8 小时前
看板有漏斗阶段,为什么转化率仍可能是假的?用 ClickHouse 检查演示埋点
后端