如何写html邮件 —— 参考主流outook、gmail、qq邮箱渲染邮件过程

news2024/11/15 15:33:39

文章目录

    • ⭐前言
      • ⭐outlook渲染邮件
      • ⭐gmail邮箱渲染邮件
      • ⭐qq邮箱渲染邮件
    • ⭐编写html邮件
      • 💖table表格的属性
      • 💖文本
      • 💖图片
      • 💖按钮
      • 💖背景图片
    • ⭐总结
    • ⭐结束

yma16-logo

⭐前言

大家好,我是yma16,本文分享关于 如何写好具备兼容性的html邮件。
背景
由于安全因素,导致 outlook和gmaiil的客户端html邮件不兼容 css 外链,qq邮箱也不支持渲染html中body之外部分即不兼容class选择器样式,也不支持script加载js,不兼容div 存在 flex的布局。
因为在不同的环境下html邮件的渲染存在差异,所以即使是使用大模型也顶不住html邮件的编写,二十几年前的html语法。
HTML邮件的写法与普通的HTML页面相似,但需要注意以下几点:

  1. DOCTYPE声明:在HTML邮件中,最好使用HTML 4.01 Transitional的DOCTYPE声明,以确保兼容性。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  1. 标签和属性的限制:根据不同的邮件客户端,可能存在某些标签和属性的限制。为了确保邮件在各种客户端中正常显示,建议避免使用一些复杂的标签和属性,如<script><style><object>等。另外,某些客户端也可能会自动禁用或移除某些标签和属性,如<form><input>等。

  2. 行内样式:由于邮件客户端对CSS的支持程度不同,建议使用行内样式来设置邮件内容的样式。同时,可以使用内联CSS样式标签来设置一些全局样式,但需要注意,一些客户端可能会忽略或移除这些样式。

  3. 图片和链接:邮件客户端默认会禁用外部图片和链接的加载,为了确保图片和链接正常显示,可以使用CID(Content-ID)来嵌入图片,或者使用完整的URL来引用图片和链接。

下面是一个简单的HTML邮件的写法示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>HTML邮件示例</title>
    <style type="text/css">
        body {
            font-family: Arial, sans-serif;
            font-size: 14px;
            color: #333;
        }
        h1 {
            color: #555;
        }
        a {
            color: #007bff;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <h1>欢迎来到我们的网站</h1>
    <p>这是一个HTML邮件示例,<a href="https://www.example.com">点击这里</a>访问我们的网站。</p>
    <img src="cid:image1" alt="Logo">
</body>
</html>

在上面的例子中,使用了行内样式来设置正文字体、字号和颜色。链接使用了<a>标签,并添加了颜色和文本装饰的样式。图片通过CID来嵌入,CID为image1
系列往期文章
react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html
unlayer 编辑器 mjml 编辑器对比
https://yongma16.xyz/react-mjml/

node发送邮件
node笔记——调用免费qq的smtp发送html格式邮箱
html table 表格使用
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)

⭐outlook渲染邮件

引用 outlook问题描述
https://answers.microsoft.com/zh-hans/outlook_com/forum/all/outlook-%e5%ae%a2%e6%88%b7%e7%ab%af-html/02c5699d-f079-4d19-8af6-ab59c2c15634
https://answers.microsoft.com/zh-hans/search/search?SearchTerm=html%E9%82%AE%E4%BB%B6&tab=&status=all&advFil=&IsSuggestedTerm=false&isFilterExpanded=undefined&CurrentScope.ForumName=outlook_com&CurrentScope.Filter=outlk_com&ContentTypeScope=&page=1&sort=Relevance&dir=Desc&from=threadpagesearchbar
outlook 编辑的邮件只能上下排版,渲染的样式完全是style内联
outlook

⭐gmail邮箱渲染邮件

gmail渲染的email table->tr->td 标签包裹
gmail-render

⭐qq邮箱渲染邮件

qq邮箱截断了 body之外的内容
渲染body内的元素在 id为mailContentContainer的dom中
qq-email

⭐编写html邮件

参考二十年前的语法使用 table tr td 标签来编写html。
推荐两个编写html的模板语法

  1. https://mjml.io/
  2. https://unlayer.com/

💖table表格的属性

HTML表格的样式属性包括:

  1. border:表格边框的宽度
  2. cellpadding:单元格内边距
  3. cellspacing:单元格间距
  4. width:表格的宽度
  5. height:表格的高度
  6. background:表格的背景颜色或图片
  7. text-align:表格内容的水平对齐方式(left、center、right)
  8. vertical-align:表格内容的垂直对齐方式(top、middle、bottom)
  9. border-collapse:表格边框的合并属性(collapse、separate)
  10. border-spacing:表格边框的间距
  11. caption-side:表格标题的位置(top、bottom)
  12. color:表格内容的字体颜色
  13. font-size:表格内容的字体大小
  14. font-weight:表格内容的字体粗细程度
  15. line-height:表格行高

💖文本

在td中渲染div

<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
  <tbody>
    <tr>
      <td>
        <div>
        Hello World
        </div>
      </td>
    </tr>
  </tbody>
</table>

文本
text-render

💖图片

渲染img标签,邮件不支持 video svg

  <table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
    <tbody>
      <tr>
        <td>
          <img height="auto" src="http://191n.mj.am/img/191n/1t/h0.jpg" />
        </td>
      </tr>
    </tbody>
  </table>

渲染图片
img

💖按钮

通过 a 标签 达到按钮 跳转的作用

     <table border="0" cellpadding="0" cellspacing="0" role="presentation"
    style="border-collapse:separate;line-height:100%;">
    <tr>
      <td align="center" bgcolor="#e85034" role="presentation"
        style="border:none;border-radius:24px;cursor:auto;mso-padding-alt:10px 25px;background:#e85034;"
        valign="middle">
        <a href="https://mjml.io"
          style="display:inline-block;background:#e85034;color:#ffffff;font-family:Ubuntu, Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif;font-size:13px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:24px;"
          target="_blank"> SUBSCRIBE </a>
      </td>
    </tr>
  </table>

按钮
button

💖背景图片

配置背景图片

    <table align="center" background="http://191n.mj.am/img/191n/1t/h0.jpg" border="0" cellpadding="0" cellspacing="0" role="presentation" style="background:url(http://191n.mj.am/img/191n/1t/h0.jpg) center top / cover no-repeat;background-position:center top;background-repeat:no-repeat;background-size:cover;width:100%;">
      <tbody>
        <tr>
          <td>
            <div style="margin:0px auto;max-width:600px;">
              <div style="line-height:0;font-size:0;">
                <table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
                  <tbody>
                    <tr>
                      <td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
                        <div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:middle;width:100%;">
                          <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:middle;" width="100%">
                            <tbody>
                              <tr>
                                <td align="center" style="font-size:0px;padding:10px 25px;padding-top:45px;padding-bottom:10px;word-break:break-word;">
                                  <div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:14px;line-height:1;text-align:center;color:#45474e;"><span style="font-size: 30px; line-height: 30px;">More than an email template</span><br /><br />Only on <span style="color: #e85034">Mailjet</span> template builder</div>
                                </td>
                              </tr>
                              <tr>
                                <td align="center" vertical-align="middle" style="font-size:0px;padding:10px 25px;padding-top:10px;padding-bottom:45px;word-break:break-word;">
                                  <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;">
                                    <tr>
                                      <td align="center" bgcolor="#e85034" role="presentation" style="border:none;border-radius:24px;cursor:auto;mso-padding-alt:10px 25px;background:#e85034;" valign="middle">
                                        <a href="https://mjml.io" style="display:inline-block;background:#e85034;color:#ffffff;font-family:Ubuntu, Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif;font-size:13px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:24px;" target="_blank"> SUBSCRIBE </a>
                                      </td>
                                    </tr>
                                  </table>
                                </td>
                              </tr>
                            </tbody>
                          </table>
                        </div>
                        <!--[if mso | IE]></td></tr></table><![endif]-->
                      </td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </div>
            <!--[if mso | IE]></td></tr></table></v:textbox></v:rect><![endif]-->
          </td>
        </tr>
      </tbody>
    </table>

样式效果
background
inscode测试

⭐总结

HTML是超文本标记语言(Hypertext Markup Language)的缩写,是用于创建网页的标准化语言。HTML的版本发展可以分为以下几个阶段:

  1. HTML 1.0:于1993年发布,用于描述文本内容和基本的文档结构,包括标题、段落、列表等基本元素。

  2. HTML 2.0:于1995年发布,引入了一些新的元素和属性,如表格、图像、链接等。

  3. HTML 3.2:于1997年发布,进一步扩展了元素和属性,新增了一些样式控制的能力,如字体、颜色等。

  4. HTML 4.0:于1997年发布,引入了一些新的特性,如框架、表单、层等,同时也加强了对脚本和样式的支持。

  5. XHTML 1.0:于2000年发布,是HTML的可扩展版本,更加严格的规范了文档的语法和结构。

  6. HTML 5:于2014年发布,是HTML的最新版本,引入了许多新的特性和API,如媒体播放、本地存储、绘图等,同时也增加了对移动设备和多媒体的支持。

HTML的发展一直致力于提升标记语言的功能和表现能力,同时也考虑到了不同的设备和平台的需求。随着互联网的不断发展,HTML也在不断更新和演进,以适应新的应用场景和技术要求。

有必要花时间去写具备兼容性的html邮件吗?
个人觉得没有必要花时间在这上面,邮件渲染使用html4之前的语法,不支持htm5的语法,编程语言的未来会支持h5的写法

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!
earth

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 最后,感谢你的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件装一送三了!还附带弹窗资讯,你确定不试一下?

前言 前几天一个朋友向我吐槽&#xff0c;说电脑太卡了。自己好像都没安装什么软件&#xff0c;怎么就那么多弹窗广告。 我看了一下他的电脑&#xff0c;笑了一下说&#xff1a;你的电脑真好&#xff0c;都会只能给你推荐美女看&#xff0c;这资讯来之不易啊&#xff0c;好好享…

深信服技术认证“SCSA-S”划重点:文件包含漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

霍兰德职业兴趣测试 60题(免费版)

霍兰德职业兴趣理论从兴趣的角度出发探索职业指导的问题&#xff0c;明确了职业兴趣的人格观念&#xff0c;使得人们对于职业兴趣的认识有了质的变化。在霍兰德职业兴趣理论提出来之前&#xff0c;职业兴趣和职业环境二者分别独立存在&#xff0c;正是霍兰德的总结&#xff0c;…

Snipaste下载和使用

文章目录 前言一、Snipaste功能1.屏幕截图2.贴图功能3.图片编辑4.标注功能5.快捷键6.支持多屏7.安全可靠 二、使用步骤三、下载 总结 前言 Snipaste是一款简单但功能强大的截图工具&#xff0c;也可以将截图贴回到屏幕上。 一、Snipaste功能 1.屏幕截图 支持捕捉全屏、窗口、…

在 PyCharm 中使用 Copilot

GitHub Copilot 由 OpenAI Codex 提供支持&#xff0c;可帮助用户在编辑器中实时工作。 它使用强大的 GPT-3 模型版本&#xff0c;该模型在大量开源代码上进行训练。 此外&#xff0c;GitHub Copilot 可在不同的 IDE&#xff08;集成开发环境&#xff09;上使用&#xff0c;包…

MBTI职业性格测试 28题(免费版)

MBTI职业性格测试概述 MBTI是现在国际上最为流行的测试工具&#xff0c;利用MBTI职业性格测试&#xff0c;可以清楚地找到自己的性格特点以及兴趣爱好&#xff0c;方便于对职业进行规划、以及改善人际关系。其主要应用心理学常识对个性做出判断&#xff0c;提炼出动力、信息收…

【基础篇】十二、引用计数法 可达性分析算法

文章目录 1、Garbage Collection2、方法区的回收3、堆对象回收4、引用计数法5、可达性分析算法6、查看GC Root对象 1、Garbage Collection C/C&#xff0c;无自动回收机制&#xff0c;对象不用时需要手动释放&#xff0c;否则积累导致内存泄漏&#xff1a; Java、C#、Python、…

计算机毕业设计 SpringBoot的乡村养老服务管理系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【MIdjourney】关于图像中人物视角的关键词

本篇仅是我个人在使用过程中的一些经验之谈&#xff0c;不代表一定是对的&#xff0c;如有任何问题欢迎在评论区指正&#xff0c;如有补充也欢迎在评论区留言。 1.全景镜头(panorama) 全景镜头是一种广角镜头&#xff0c;可以捕捉到比普通镜头更广阔的视野范围。全景镜头&…

C语言第三方库Melon开箱即用之词法分析器使用

之前的文章中&#xff0c;笔者介绍了Linux/UNIX C语言库Melon的基本功能及框架使用。 本文将介绍Melon中的词法分析器组件。 Melon的Github仓库为&#xff1a;https://github.com/Water-Melon/Melon 词法分析器在Melon中并不依赖于自身框架&#xff0c;因此可以在不初始化框…

Java二叉树的遍历以及最大深度问题

Java学习面试指南&#xff1a;https://javaxiaobear.cn 1、树的相关概念 1、树的基本定义 树是我们计算机中非常重要的一种数据结构&#xff0c;同时使用树这种数据结构&#xff0c;可以描述现实生活中的很多事物&#xff0c;例如家谱、单位的组织架构、等等。 树是由n&#…

xxljob分布式调度平台

分布式调度平台 XXL-JOB 极简入门 https://segmentfault.com/a/1190000041674725xxl-job-core 模块&#xff1a;XXL-JOB 核心。后续我们在编写执行器时&#xff0c;会引入该模块。 xxl-job-admin 模块&#xff1a;调度中心。 xxl-job-executor-samples 模块&#xff1a;提供了…

攀登者2 - 华为OD统一考试

OD统一考试 分值: 200分 题解: Java / Python / C++ 题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以…

es索引数据过滤查询

1.我们往kibana插入数据,来进行查询 POST /t1/_doc/ {"name":"cat","age":"18","address":"BJ","job":"dev" } POST /t1/_doc/ {"name":"dog","age":"1…

TCP服务器的编写(下)

我们现在开始对我们的客户端开始封装 我们的客户端&#xff0c;创建完套接字&#xff0c;需不需要bind呢&#xff1f;&#xff1f; 当然是不需要的&#xff0c;你本身是一个客户端&#xff0c;其他人写的应用也可能是客户端&#xff0c;如果我们bind&#xff0c;一定意味着我们…

【解决】hosts文件无修改权限问题

1. 以管理员身份运行命令提示符&#xff08;cmd&#xff09;&#xff1a; 2. 在cmd中输入notepad进入记事本&#xff1a; 3. 通过记事本打开hosts文件&#xff1a; 4. 修改并保存&#xff1a;

Java反射之获取构造方法,成员变量,成员方法以及反射的作用

目录 1.什么是反射2.获取Class对象的三种方式3.反射获取构造方法4.反射获取成员变量5.反射获取成员方法6.反射的作用 1.什么是反射 在Java中&#xff0c;反射是指程序在运行时动态地获取类的信息、调用方法和访问属性的能力。 通过反射&#xff0c;可以在运行时获取类的构造函数…

WebofScience快速检索文献的办法

Web of Science为什么老是搜不到文章&#xff0c;原来是要在这个地方全部勾选 如果是搜标题的话&#xff0c;选Title&#xff0c;输入你要搜的文章标题 另外&#xff0c;也可以在浏览器直接搜文章标题&#xff0c;得到文章的DOI&#xff0c;然后选DOI&#xff0c;直接搜DOI也行…

2.6 KERNEL LAUNCH

图2.15在vecAdd函数中显示最终主机代码。此源代码完成了图2.6.中的骨架。2.12和2.15共同说明了一个简单的CUDA程序&#xff0c;该程序由主机代码和设备内核组成。该代码是硬接的&#xff0c;每个线程块使用256个线程。然而&#xff0c;使用的线程块的数量取决于向量&#xff08…