电子邮件中是否支持JavaScript?

231

电子邮件中是否支持JavaScript?


88
这不应该被评为-1。 - kikito
4
目标电子邮件程序是Outlook吗?Thunderbird?Gmail?Hotmail?还是所有这些?其他的呢?不同的电子邮件程序以不同的方式呈现邮件。 - WonderWorker
2
我刚刚看到RocketTheme的人正在倒计时,显示天、小时、分钟和秒,并且图形也在动画...现在可能实现的东西真是令人惊叹。不确定他们还有什么其他的做法。在Mac邮件客户端中观察到。 - landed
3
我找到了一个域名,得到了这个链接 - http://motionmailapp.com/ - landed
3
@landed,我刚在WordPress的邮件里看到了同样的东西。原来它只是一个动态生成的GIF,从获取时开始倒计时(并且在45秒后重新开始——我猜如果你在45秒内没有点击链接,你可能已经关闭了邮件)。 - Lionel Rowe
显示剩余2条评论
11个回答

76

http://en.wikipedia.org/wiki/Comparison_of_e-mail_clients

旧的客户端, 例如 Lotus Notes、Mozilla Thunderbird、Outlook Express 和 Windows Live Mail 都似乎支持某种形式的 JavaScript 执行,但其他客户端则不支持。

从安全角度来看,这似乎是个不好的想法,因此我预计即使在这些客户端中,这也不会一直是一个可用的功能。


11
莲花邮件、Mozilla Thunderbird、Outlook Express和Windows Live Mail似乎都支持某种形式的JavaScript执行——在信息模板脚本中,而非接收到的电子邮件中。 - Quentin
4
哇,这些客户现在已经很老了,关于它们以前的行为方式的链接正在逐渐消失,我无法证实或否认其中的任何内容。六年后,如果仍有任何一款电子邮件客户端有意启用脚本执行功能,我会感到惊讶。 - MatthewMartin
2
@MatthewMartin 那六年已经到来。 - boc

39

简短回答

不行


详细回答

这取决于情况。但电子邮件不能保证按您希望的方式运行。不同的电子邮件客户端处理JS的方式不同。大多数新的电子邮件客户端都不支持JS,因为在包含如此多个人信息的桌面应用程序中支持脚本执行潜在非常危险。

我有一个使用JS的用例。我在Outlook的Web客户端和桌面客户端上尝试了一下,结果发现Outlook会清除HTML邮件中的脚本部分。可能还有其他支持JS执行的电子邮件客户端,但是由于不能控制电子邮件在客户端机器上的查看位置,因此嵌入任何脚本都不是一个好主意。

建议将HTML电子邮件保持简单化,没有JS,且CSS最少(因为不同的电子邮件客户端对CSS的支持也各不相同)例如:Outlook的Web客户端甚至无法识别电子邮件中的HTML按钮标记。我不得不使用锚标记和一些CSS来模拟按钮的显示。


底线 - 在处理HTML电子邮件内容时,不要依赖于JavaScript。


像Hotmail、Gmail和ProtonMail这样的基于Web的Webmail如何处理?它们能否执行任何类型的JS或者有其他与您交互的方式吗?(例如,当您打开带有签名中图像的邮件时,是否会知道该图像托管在仅供您使用的服务器上,并记录某人尝试访问的情况?)(或其他我不知道的事情) - softyoda yoann
我没有在这些平台上进行测试,但 Outlook 的 Web 版本对我所有的 JS 代码都进行了阻止。我想这主要是为了限制发件人以有害的方式与收件人进行交互。 - Ketan R
@softyodayoann,网络邮件禁止在电子邮件中使用JavaScript并没有技术上的原因,但这是一个巨大的安全风险,所以他们有很好的商业理由来禁止它。当然,在他们从原始电子邮件中删除任何JS之后,他们可以添加自己的JS以跟踪您的交互。 - Charles Wood
1
同时,这使得电子邮件变得不太动态。通过电子邮件发送应用程序或小型嵌入式应用程序具有很大的价值。我们需要一种新的电子邮件标准,内置安全性以运行JS。 - a5af

23

一般情况下,电子邮件阅读器不允许JavaScript。


2
Chrome浏览器中的Gmail怎么样? - Nicolas S.Xu
1
@NicolasS.Xu Gmail在将邮件交给浏览器之前会移除JavaScript,因此JS不起作用。我在Firefox 56和Chrome 61中测试了Gmail。还检查了Webmaster工具中的代码,发现JS代码被移除了。 - Christopher K.

22

其他答案提到了答案是否定的

另一方面,HTML附件可能会在运行Javascript的环境中打开。

编辑:有人认为我没有正确回答问题,所以我会更全面地回答。

总结:我预计,许多或大多数收到包含嵌入式Javascript的HTML格式电子邮件的用户将看到它运行,并进行了一些测试以确认这在某些环境中是正确的。 但是对于某些用户,Javascript将被阻止。

协议(特别是RFC2854)明确涉及文本/ HTML消息正文类型内的脚本编写(Scripting),声明:

   

此外,HTML 4.0中引入的脚本语言和交互能力引入了许多安全风险,涉及由发送方编写但由接收方解释的程序的自动执行。 执行此类脚本或程序的用户代理必须极其小心,以确保未经信任的软件在受保护的环境中执行。

因此,协议支持Javascript,但哪些用户代理支持呢?

我的(古老的)电子邮件阅读器使用表格来指定每种MIME类型要使用的查看器软件,将HTML内容转发到我最喜欢的Web浏览器。 几乎所有当前的Web浏览器都支持Javascript(有些在您尝试关闭它时会发出严重警告!)。 现代电子邮件代理是否包括内部HTML解释器,如果是,Javascript是否打开或关闭? 我已经检查了Thunderbird的文档,并发现Javascript似乎是默认打开的,但可以关闭: http:// codeverge.com/mozilla.support.thunderbird/simple-html-tags-reference-docume/2030160

我注意到现在有一些(或许很多)用户直接从浏览器中访问他们的电子邮件(webmail是其中之一),而不是运行独立的电子邮件软件。迄今为止我测试过的所有这种平台都会运行邮件消息中嵌入的任何JavaScript。然而,一些此类环境,根据用户安全设置,不会自动获取外部链接(JavaScript、图片或其他),因此只能运行作为消息附件包含的文件中的外部JavaScript。对于设备没有当前互联网连接的任何离线电子邮件阅读器也是如此。
上述内容适用于电子邮件主体消息部分中嵌入的JavaScript。还可以明确地将HTML作为“附件”给出,如果保存并打开,则会在Web浏览器中显示,其中极有可能使用JavaScript。因此,可以在替代的text/plain主体和/或在主文本/ HTML中包含指向附件的标记中,作为附件的启用了JavaScript的电子邮件的第二份副本。
我一直在思考这个问题,因为我的一些熟人坚持给我发送“电子贺卡”,其中包括一个指导我前往链接的文本消息,但我发现链接非常不满意,仅基于原则我就拒绝考虑加载它。我已经编写并发送包含交互式图形、音乐甚至游戏的内嵌JavaScript的电子贺卡,并对结果感到满意。
因此,我认为正确答案是“是”,既因为协议明确地涉及脚本,也因为我个人使用的所有电子邮件代理都运行了我的测试电子邮件中的JavaScript。

3
你没有给出任何已经成功测试JavaScript并使用JavaScript代码的客户端的具体列表。我测试了Thunderbird 52.4.0的“原始HTML”设置,并在我的测试邮件中忽略了JS <script> document.write('test'); </script>。Andorid 2.2.44的Outlook、Android 5.208 的K-9、Gmail网络邮件系统(测试于06.11.2017)和Roundcube网络邮件系统0.9.5也是如此。因此,我同意那些认为它在大多数(现代)客户端中不起作用的人的看法。尽管大多数用户使用网络邮件系统,但这些系统似乎在将消息交给浏览器之前剥离了JS,这是有充分理由的。 - Christopher K.
1
由于您提供的Thunderbird“文档”实际上并不是文档,而是一些用户贡献的问题,因此我搜索了一些官方文档,并找到了这个链接:https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Releases/3 - 它说明在Thunderbird 3中取消了电子邮件中的JS。 - Christopher K.
截至2022年12月,此答案仍适用于Gmail。但是,在某些浏览器中的Gmail桌面版本中,附件必须先保存再打开(直接点击会过滤掉脚本)。因此最好在HTML中包含纯文本的用户说明(或者包含在电子邮件中)。 - personal_cloud

4

您无法将可执行的JavaScript代码放入服务器和邮件客户端中。但是,电子邮件支持链接,您可以在电子邮件中链接到您的内容。


2
对于大多数邮件客户端而言,不需要。

2

由于安全问题,没有电子邮件客户端支持JavaScript

尝试使用此HTML内容发送电子邮件

     <!DOCTYPE html>
     <html>
     <body>
     <button onclick="this.innerHTML=Date()">The time is?</button>
     </body>
     </html>

1

这可能存在问题,因为邮件客户端无法读取它,邮件服务器可能会拒绝它。所以最好不要包含它。


0

简短回答:不支持在电子邮件中使用JavaScript。

详细回答:我已经在两个电子邮件阅读器上进行了测试。Outlook (online)OE Classic。由于OE Classic非常过时(我在Windows 7上使用它),它确实支持JavaScript,并且我已经用警报按钮进行了测试。然而,较新的Outlook甚至不支持按钮,这显示为纯文本。因此,总结一下,JavaScript仅在某些通常较旧的电子邮件阅读器上启用,但在新的阅读器(如Outlook)上不启用。


0

电子邮件不支持Javascript。


3
不正确。至少 Outlook 和 Outlook Express 支持 Javascript,这也是要避免它们的许多原因之一(出于安全考虑)。 - PauliL
1
@PauliL:这取决于您的受限制网站区域设置是否允许它。 - Neil Knight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接