部门要做一个简单的提测邮件模板, 取代每次提测时都要手动发邮件的功能, 我实现其中一部分文字渲染的功能. 通过 markdown 语法对提测内容进行格式化.
之前的邮件模板是

可见非常的丑陋.
由于我自己喜欢用markdown语法写邮件, 对这种table的表格信息非常反感, 决定稍稍修改一下提交的样式.
第一步是解决 java 渲染 markdown 语法的问题, 这个好办, 我用的这个库 markdownpapers-doxia-module, maven 的 repo 在这里.
接下来是解决生成好了的 html 如何美化. 当然你可以自己去写 css, 我前端功底太差, 实在搞不定. 我是从 [MOU][http://25.io/mou/] 这个 markdown 编辑器中导出了一份 css 文件(这里推荐一下这个软件, 真的非常好用, 如果能后同步到 evernote 就更好了).

代码这里就不贴了, 需要的自己下载:
Codes Here: https://gist.github.com/danshan/59a43aae44e44866aa2345f7d40c3042
我处理渲染的逻辑是, 首先把需要提交的数据全部渲染到一个 markdown 文件, 然后再把这个 markdown 文件渲染到 email 正文中. 那么这里需要自己去设计两个文件:
1. markdown 文件的模板 template/emailTemplate.md
这个很简单, 把需要用户填写的地方留出来就行了:
# [提测] ${req.projectName!"unknow"} > **开发人员:** ${req.projectLeader!"unknow"} > **测试人员:** ${req.qaName!"unknow"} > **产品经理:** ${req.pmName!"unknow"} --- ## 相关需求 ${req.demand!""} ## Release Notes ${req.releaseNotes!""} ## 测试要点 ${req.testMainPoints!""} ## 相关信息 * 相关应用: ${req.relatedApps!"unknow"} * 上线时间: ${req.plannedTime?string["yyyy-MM-dd hh:mm:ss"]} ## 备注 ${req.otherRemark!"无"}
2. email html 的模板 template/emailTemplate.ftl
1 | <html> |
需要注意的是, 这个 html 中由于 blog 篇幅的限制, 我这里把css的配置删掉了, 由于 email 无法 link 外部的 css文件, 所以需要把前面下载的 css 文件的内容贴到 <style></style>
中间.
下面就是需要需要提交到页面上的数据类
1 | public class TestNoticeBean implements Serializable { |
不管是渲染 markdown 还是最后的渲染 html, 都是使用了 freemarker 内置的方法.
1 |
|
最后的渲染逻辑在下面
1 | Map<String, Object> paramsForMd = new HashMap<String, Object>(); |
最后那个把 <code>
转成 <pre>
, 主要是因为 markdown 渲染后的代码块用的是 <code>
, 但是会碰到渲染到 html 时, 换行符就没了, 所以中间又转了一次.