html文件生成在线连接,使用Themleaf 模板引擎手动生成html文件

2023-11-07

1.为什么要写这一篇呢?

在做一个邮件发送功能的时候,需要发送html邮件,javaMail 发送html 的时候需要有已经生成的html正文,所以需要提前将要发送的内容生成,所以就需要模板引擎来动态填充数据。

public voidsendHtmlEmail(String to, String object, String content) {

MimeMessage message= mailSender.createMimeMessage();//创建一个MINE消息

try{//true表示需要创建一个multipart message

MimeMessageHelper helper = new MimeMessageHelper(message, true);

helper.setFrom(from);

helper.setTo(to);

helper.setSubject(object);

helper.setText(content,true);

mailSender.send(message);

log.info("html邮件发送成功");

}catch(MessagingException e) {

log.error("发送html邮件时发生异常!", e);

}

}

2.引入依赖

org.springframework.boot

spring-boot-starter-thymeleaf

ognl 的jar包可能并不需要,在生成过程中报classNotFound ,应该是和我的项目结构有关系,这个包根据实际情况来使用

ognl

ognl

3.2

3.代码

(1)首先准备一个html模板,需要替换的内容使用themleaf的th表达式来占位。我的工程是springboot 项目,文件位置放在resources/templates,也就是classpath:templates/

Title

td{width:80px;height:25px;align-content:center;

}

亲爱的,您月份的工资如下:

2.配置模板引擎

@Configurationpublic classMailConfig {

@Bean("myTemplateEngine")publicTemplateEngine templateEngine(){

ClassLoaderTemplateResolver resolver= newClassLoaderTemplateResolver();

resolver.setPrefix("templates/");

resolver.setSuffix(".html");

TemplateEngine engine= newTemplateEngine();

engine.setTemplateResolver(resolver);returnengine;

}

}

为手动生成html文件单独定义一个模板引擎,其他的使用默认配置。其中制定了模板文件的位置及后缀名,这个配置和application.properties 中配置是一样的

3.生成html

@PostMapping("/sendEmail")

@ResponseBodypublic AjaxResult sendEmail(Integer id) throwsIOException {

List componentVos =salaryCompnentService.selectComponentSum(id);

List th =Lists.newArrayList();

List tb =Lists.newArrayList();for (int i = 0; i < componentVos.size(); i++) {

ComponentVo vo=componentVos.get(i);

th.add(i, vo.getName());

tb.add(i, vo.getAmount());

}

SalaryCalculateVo salaryCalculate=salaryService.selectSalaryById(id);

Context context= newContext();

context.setVariable("name", salaryCalculate.getEmpName());

context.setVariable("month", salaryCalculate.getWorkMonth());

context.setVariable("th", th);

context.setVariable("tb", tb);

String res= engine.process("mailTeamlate", context);

salaryService.sendEmail(id,res, salaryCalculate.getWorkMonth()+ "工资条", salaryCalculate.getEmail());return toAjax(1);

}

由于是测试功能,没有在代码结构上下功夫,随便写一下。主要的代码是王模板上下文Context中填充参数,engine.process()有很多重载的方法,主要有两类,一类是直接输出内容,一类是将文件输出到指定文件里。String template 这个参数指的是模板的名称。比如我的叫mailTeamlate,解析的时候模板引擎会找classpath:templates/mailTeamlate.html 这个文件。

public finalString process(String template, IContext context) {return this.process(new TemplateSpec(template, (Set)null, (TemplateMode)null, (String)null, (Map)null), context);

}

public final voidprocess(String template, IContext context, Writer writer) {this.process(new TemplateSpec(template, (Set)null, (TemplateMode)null, (String)null, (Map)null), context, writer);

}

4.效果

具体的文件内容就不说了,直接看我放到邮件的里面正文里的html样式

019dbe41c60f26ae8cb23a7349fe64a8.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html文件生成在线连接,使用Themleaf 模板引擎手动生成html文件 的相关文章

  • 3分钟学会在 ASP.NET MVC 中创建、读取和编辑 Excel 电子表格

    在本文中 您将学习如何在ASP NET MVC 应用程序中创建 读取和编辑 Excel 电子表格 为此 我们将创建一个由功能丰富的网格控件组成的电子表格应用程序 用于显示和编辑 Excel 文件 如下所示 为了在 ASP NET MVC 中
  • Vision Transformer里的MLP Head里的Pre-Logits层

    Representation layer if representation size and not distilled self has logits True self num features representation size
  • 动态代理的俩种实现方式

    提到设计模式 我们不得不提下代理模式 这里给出其定义 给某一个对象提供一个代理 并由代理对象控制对原对象的引用 说白了就是我们不能直接操作被代理的对象 而只能通过操作代理对象而间接操作被代理的对象 这就好比水厂 送水代理点 用户三者的关系
  • JavaScript 将表达式的结果转换为布尔值

    运算符可用于将表达式的结果快速转换为布尔值 true或false const foo Hello console log foo const fox Not null console log fox const bar console lo
  • 数字电路设计之ARM m0进度(2)

    2014 10 22 1 已解决问题 跳转指令B0是两条指令代价 B1是一条指令代价 2 时序同步 要做到心中有流水线 对于每个信号的状态要同时改变 终于把求最大公约数和最小公倍数的程序顺序地仿真完 接下来就要加RAM和各种调时序了
  • 网页点击跳转到微信页面

  • 9_react生命周期函数

    1 16 3 声明周期函数图 2 react16 3 和 16 4 生命周期差异 在 16 3 中 只有当 props 改变时 会触发 getDerivedStateFromProps 方法 在 16 4 中 当 props state f
  • spring 事务传播级别

    spring事务传播级别 一 介绍 1 2 各种事务的解释 1 2 什么是嵌套事务 一 介绍 主要就是下面两张图 很重要 很重要 很重要 能够清晰的描述出 第一次事务 和 嵌套事务的 关系 记录一下 当前不存在事务 直接调用带有事务的方法
  • java 纯面向对象_为什么说Java语言是一门非常纯粹的面向对象编程语言?

    针对题主提的这个问题 我在此分享Naresh Joshi的一篇译文给你 希望对你理解这个问题有所帮助 在我刚开始学习 Java 的前面几年 我从书本里知道了 Java 是遵循 面向对象编程范式 Object Oriented Program
  • sybase常见语句

    文章目录 1 查看执行计划 2 用户管理 3 系统存储过程 4 页大小 5 设置数据库为单用户模式 6 清理过程缓存 7 更新统计值 8 重建索引 9 修改字段约束为null 10 修改字段长度 12 修改字段默认值 13 修改表名 14
  • 国内主要Android应用市场包名大全

    com tencent android qqdownloader 腾讯应用宝 com qihoo appstore 360手机助手 com baidu appsearch 百度手机助手 com xiaomi market 小米应用商店 co
  • 基于RISC-V的软件编译脚本

    脚本 设置RISC V工具链riscv set env RISC V setenv RISCV PATH mnt Software FreedomStudio SiFive riscv64 unknown elf gcc 8 1 0 201
  • swiper的使用,鼠标放上面停止变动

    swiper真的太好用了 根本停不下来 div class swiper container div class swiper wrapper flex div class swiper slide img class src home s
  • (一)seaborn教程——可视化统计关系

    简介 学习笔记为官网教程seaborn教程0 9 0 安装最新版本方法 pip install git https github com mwaskom seaborn git 导入包和设置背景 import numpy as np imp
  • 【蓝桥杯每日刷题】——分巧克力

    一 题目 儿童节那天有 K 位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有 N 块巧克力 其中第 i 块是 Hi Wi 的方格组成的长方形 为了公平起见 小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们 切出
  • Gitlab+P3C-PMD(Aliyun)标准化你团队的代码

    1 背景简介 项目越来越大 团队越来越大 代码越来越来多 然后就是各种五花八门的代码格式 代码规范 要做到代码规范我们可以采取代码交叉检视 IDEA Eclipse安装插件自检 以及代码管理服务端做校验 且不说各种方法的利弊 本文直接采用服
  • ctf中MD5绕过详细总结及例题[BJDCTF2020]Easy MD5

    一 首先是MD5 函数的作用 MD5 函数的作用是计算字符串的MD5散列 返回值 如果成功则返回已计算的 MD5 散列 如果失败则返回 FALSE 二 PHP 弱类型比较绕过 代码
  • QT数据库操作学习笔记1

    一 SQL模型的类 模型 视图结构 进行数据和界面的分离 模型 视图结构分为三部分 1 模型 model 与数据源通信 并为其他部件提供接口 与底层的数据打交道 2 视图 view 从模型中获取用来引用数据条目的模型索引 与显示打交道 3
  • 香港 单双线的区别?

    现在很多香港服务器商推出的主机产品 除了有操作系统之分外 还有单线香港服务器 双线香港服务器以及多线香港服务器的区分 但是 对于很多新手站长来说 并不清楚他们之间到底有什么差异 这里就来简单的解释下 其实 之所以有这么多线路 主要还是由于国

随机推荐

  • OpenCV中图像的缩放与旋转讲解及实战演示(附Python源码)

    需要源码请点赞关注收藏后评论区留言私信 几何变换是指改变图像的几何结构 例如大小 角度和形状等 让图像呈现出缩放 翻转 映射和透视效果 这些几何变换操作都涉及复杂 精密的计算 OpenCV将这些计算过程封装成非常灵活的方法 开发者只需修改一
  • 计算机格式字体颜色,电脑怎么设置不同的字体颜色样式

    电脑的字体可以随意设置颜色 根据自己喜好选择好看舒服的颜色 不过可能很多人不知道在哪里设置 下面由学习啦小编为你整理了电脑怎么设置系统字体颜色的相关方法 希望对你有帮助 电脑设置系统字体颜色的方法 右键点击桌面空白处 选择 个性化 进入 个
  • bugku 一段Base64

    题目是一大段base64 先解一下 看来一下不知道是什么类型的 百度一下发现 参考 那就用Converter这个工具 连续三次unescape 刚开始把输出的内容全部复制到输入 发现不对 要不字母和括号去掉 String fromCharC
  • 趣味程序(绘制圆与y=x^2与歌星大赛)

    实现y x 2与圆的图形叠加显示 程序图 运行结果 歌星大赛 程序截图
  • pycharm pip 安装第三方库出错的终极解决方案

    大家都知道 pip 在安装第三方库的时候是十分方便的 在 Windows 平台上 一条命令就可以将依赖关系都搞定 pip install requests 但还是有几个小问题 1 有时候会提示权限不够 当初没有留下那个权限不足的截图 但是根
  • 2021中国华录杯·算法大赛活动进行中,超多奖励等你来拿

    话不多说 期待你的参与
  • oracle redo 移动位置,Oracle数据文件移动方法 - 转

    6 2 参考资料 Oracle数据库移动方法 这里所指 数据库移动 是将Oracle数据文件 系统数据文件或用户数据文件 控制文件 重做日志移动至新的存储路径 并修改Oracle相关配置 使之可以重新正常启动 这种应用常见于系统扩容后的Or
  • Gradle学习笔记 Gradle命令行

    执行多个任务 安装好Gradle之后 就可以使用Gradle命令行了 首先我们先新建一个文件夹gradle learn 然后在其中新建一个build gradle 这是Gradle的项目构建文件 task compile doLast pr
  • MySql InnoDB行锁——“三剑客”

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 行锁 三剑客 前言 一 行锁三剑客是什么 二 记录锁 Record Locks 三 间隙锁 Gap Locks 四 临键锁 Next Key Locks 总结 前言 行锁在
  • 蓝桥杯 Python 组省赛夺奖班-6 二分法

    一 分巧克力 题目 思路 首先确定一下巧克力边长d的上界 这里可以想像把所有巧克力全部融化 平均每个人能分到 sum k 面积的巧克力 高度不考虑 那么d的上界为int math sqrt sum k 暴力 直接从d的上界开始到1判断是否可
  • shell脚本一键部署LAMP架构

    一 部署LAMP基本架构 1 L linux A apache M mysql P php 2 稳定版本 mysql5 1 php5 3 apache2 2 3 安装顺序 apache gt mysql gt php 4 将所需的压缩包 h
  • Linux设置静态IP

    Linux设置静态IP 使用ip addr查看ip 如下所示就是动态IP 1 什么是静态IP 静态ip就是固定的ip 需要手动设置 静态IP地址 又称固定IP地址 是长期分配给一台计算机或网络设备使用的 IP 地址 一般来说 一般是特殊的服
  • 【计算机视觉】双目测距(五)--匹配算法对比

    原文 http www cnblogs com polly333 p 5130375 html 三种匹配算法比较 BM算法 该算法代码 view plaincopy to clipboardprint CvStereoBMState BMS
  • 解决报错:Vue移动端项目中鼠标无动作时,滚动条自动下滑,拉取数据

    背景 在鼠标慢慢滚动 滚动到某一处位置的时候 滚动条自动触发 拼命往下走 正常应该是滑动到摸个位置时候 加载下一页的数据 Video 2022 09 16 155954 这个问题困扰了我两天 特此记录 用的Vant组件库的van list来
  • 2017电子设计攻略_控制类

    2017年电子设计大赛准备攻略 控制类 Author 靳皓屹 中北大学 1 组队 组队是一件非常重要的事情 在组队之前 一定要想清楚 1 三个人中间是否有一位核心成员 具有决断力 能够定好团队的方向 2 分工问题 个人认为最合理的分工是这样
  • g++指定include路径

    在linux下编译c 应用 可使用g 命令 编译的时候也是针对c 源文件 需要指定头文件路径 在指定头文件路径时 可使用 I参数 如果是多个路径则要通过指定多个 I参数来设置多个路径
  • 中国地方ZF数据开放指数(省域指数、城市指数)

    中国开放数林指数 是我国首个专注于评估政府数据开放水平的专业指数 由复旦大学数字与移动治理实验室制作出品 开放数据 蔚然成林 开放数林 意喻我国政府数据开放利用的生态体系 一棵棵地方开放 数木 由最初的丛然并生 成荫如盖 直至枝繁叶茂 花开
  • Python JSON格式处理

    从外部读入的json经过loads反序列化后可以转换为dict类型的数据 dict类型的数据可以通过dumps转换为json格式的数据 param self request body decode utf 8 dict data json
  • ANSI C、C89、C99和C51的区别

    ANSI C C89 C99和C51的区别 什么是ANSI C ISO C C89 C90标准 随着C语言使用得越来越广泛 出现了许多新问题 人们日益强烈地要求对C语言进行标准化 1983年 美国国家标准协会 ANSI 组成了一个委员会 X
  • html文件生成在线连接,使用Themleaf 模板引擎手动生成html文件

    1 为什么要写这一篇呢 在做一个邮件发送功能的时候 需要发送html邮件 javaMail 发送html 的时候需要有已经生成的html正文 所以需要提前将要发送的内容生成 所以就需要模板引擎来动态填充数据 public voidsendH