因为在工作中经常使用邮件来进行一些异常告警和通知, 所以会在邮件中直接附带日志, 或者是代码等信息, 但是如果直接发送html, 样式会丑的不行完全影响阅读. 所以寻求一个好的标签将这些包裹起来. 类似于md的```符号,直接将代码段展示出来. 网上提到的基本就是这三个标签,
<p>
,
<code>
,
<xmp>
- 我这里已经初步的将Map传入的参数, 在工具类中封装处理成html的table展示.
- 因为我也不是前端开发人员, 具体这三个标签区别在哪, 大家自己百度, 这里只是直接用这三个标签来试试发送邮件的效果
2020年12月16日 补充:
还有一个pre
标签. 它也和xmp
标签类似, 能够保持格式输出代码(认识\n
并换行), 但是区别是如果是html
代码,xmp
是展示代码,pre
则是展示浏览器页面效果
代码
测试代码
下面分别针对 html ,日志, 代码, json 等
@Test
public void fun01(){
//nginx 404 html
String body= "<html>\n" +
"<head><title>404 Not Found</title></head>\n" +
"<body>\n" +
"<center><h1>404 Not Found</h1></center>\n" +
"<hr><center>nginx/1.19.4</center>\n" +
"</body>\n" +
"</html>";
Map<String, String> param = new LinkedHashMap<>(16);
param.put("html xmp", "<xmp>"+body+"</xmp>");
param.put("html p", "<p>"+body+"</p>");
param.put("html code", "<code>"+body+"</code>");
//格式化后的json, 有换行
String formatJson = "{\n" +
" \"sites\": [\n" +
" { \"name\":\"菜鸟教程\" , \"url\":\"www.runoob.com\" }, \n" +
" { \"name\":\"google\" , \"url\":\"www.google.com\" }, \n" +
" { \"name\":\"微博\" , \"url\":\"www.weibo.com\" }\n" +
" ]\n" +
"}";
param.put("formatJson xmp", "<xmp>"+formatJson+"</xmp>");
param.put("formatJson p", "<p>"+formatJson+"</p>");
param.put("formatJson code", "<code>"+formatJson+"</code>");
//精简json
String json = "{\"sites\":[{\"name\":\"菜鸟教程\",\"url\":\"www.runoob.com\"},{\"name\":\"google\",\"url\":\"www.google.com\"},{\"name\":\"微博\",\"url\":\"www.weibo.com\"}]}";
param.put("json xmp", "<xmp>"+json+"</xmp>");
param.put("json p", "<p>"+json+"</p>");
param.put("json code", "<code>"+json+"</code>");
//console log 控制台日志
String log =
"21:17:42.137 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]\n" +
"21:17:42.173 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]";
param.put("log xmp", "<xmp>"+log+"</xmp>");
param.put("log p", "<p>"+log+"</p>");
param.put("log code", "<code>"+log+"</code>");
//java代码
String java = " public static void main(String[] args) {\n" +
" System.out.println(\"args = \" + args);\n" +
" }";
param.put("java xmp", "<xmp>"+java+"</xmp>");
param.put("java p", "<p>"+java+"</p>");
param.put("java code", "<code>"+java+"</code>");
//这是发邮件的工具类, 同时将param参数包装成html的table
MailSendUtil.notifyNormalHtmlTable("test测试", Lists.newArrayList("zgd@123.com"),param );
}
效果
整个邮件被拉宽了, 没有截全.
展示代码块整体效果
xmp > code > p
补充: 展示代码效果:
xmp> pre > code > p
- html: code和p会展示浏览器页面效果, xmp会展示源代码
- json格式化: xmp会展示换行效果(对
\n
有效果), code有小字体代码段效果,无换行(对\n无效果,隐藏\n
), p无小字体效果,无换行. - 普通json: xmp和code一致. p无小字体效果
- log: xmp会换行, code有代码段小字体效果, 无换行. p 无效果
- java: xmp会换行, code不换行, p无效果