事情的原由是运营须要给用户推送各种活动邮件,产品便把实现邮件模板的需求交由我来完成,得,有需求咱实现即是了。一开始想的确实挺好,不就是个静态页面嘛,刷的一下就搞定了,而后邮件发送出去各类兼容性问题,所幸只是测试邮件,否则就炸锅了。果真事情没有想象中的简单,网上查了一下发现HTML邮件模板的编写仍是有点学问在的(文末附有「HTML邮件相关资源推荐」)css
HTML邮件模板的编写,先排出如下前提条件html
根据前提条件2,在不知道邮件最终会在哪一个第三方邮件平台上展现时,确保布局不能乱的状况下只能用最保守的布局方式,就是table布局。这个布局方法是早期的网页比较流行的方式,优势很明显,兼容性无敌前端
仍是前提条件2,尽可能避免使用css3的语法,很大可能性会失效,那么要如何肯定兼容性呢,文末有附上鉴别工具。在某些状况下,在与设计和产品反馈说兼容性不太好的状况下仍要采用当前设计(没错,这种状况也有不少),这时候就要尽可能采用一些备用方案了。好比如下所示:css3
/* 失效状况下的补救方案 */
background: #00A9BA;
/* 渐变背景,有可能会失效 */
background: linear-gradient(90deg, #52D6CE 0%, #00A9BA 100%);
复制代码
为何说行内样式优先,是由于第三方邮件平台展现邮件内容的时候,有可能会去除邮件模板的head
,style
等标签,若是样式是统一存放与style标签内的,则模板也就乱了。因此,在编写邮件模板时,尽可能使用行内样式实现。若是存在一些特殊的状况如须要处理响应式邮件时,就不得不用到style标签来作class
的处理,这时候也得要有备用的兼容方案,好比移动端样式优先显示,经过媒体查询再显示PC端的内容。固然了,最好在设计前和设计师沟通一下(大雾git
经过兼容性的查询可知,position
属性基本不被主流邮件客户端支持,这东西最好不用就是了。具体的缘由是什么没查到,这里能够猜想的是,若是开放position
,那么有可能会将邮件客户端的内容给遮挡住,这也是很尴尬的github
这个自没必要说了,全部的邮件没法执行Javascript代码,为了安全性。因此若是产品有要求对邮件进行一些脚本操做,最好的办法就是跳转至自用的网站下再进行相应地操做。web
将布局的内容及样式放置于body
标签中,是为了防止第三方客户端删除头部、只保留body
标签的状况出现。这里要注意的一点是,若是存在特殊状况下的style
标签,那么留在body
中存在的几率会大一些。安全
存手工编写是最靠谱也是最麻烦的方法,看实际状况而定,邮件的实现必要时也须要和产品以及设计沟通,切忌让设计天马行空的去搞,否则麻烦的仍是前端(扯皮麻烦)。 如下是一些邮件资源,这里须要说明的是,这一类的框架优势是比较省事,不用写太多,那缺点也很明显,就是得学多一门几乎是新的语言框架
本文使用 mdnice 排版编辑器