【问题标题】:Effective maximum mailto: body lengths有效最大邮寄地址:正文长度
【发布时间】:2011-05-27 07:33:19
【问题描述】:

mailto: 链接的 &body 部分中的文本有一个最大长度。根据我的一位同事的说法,W3C 将限制发布为 256(不过我没有链接来支持它)。

我们在电子邮件和网页中都嵌入了 mailto: 链接,并且已成功使用超过 256 个字符。但是,在某个时间点之后,电子邮件客户端和浏览器开始崩溃并拒绝打开链接。

我想知道以下允许的实际最大长度:

邮件客户端:

  • 展望(2003、2007、2010)
  • Eudora(7.1 和/或任何最新版本)
  • Thunderbird(最新版本)

浏览器:

  • 火狐(3+)
  • IE(6、7、8)
  • iPhone 浏览器

我们将不胜感激地收到您能提供的任何和所有号码。

【问题讨论】:

标签: cross-browser compatibility mailto email-client multiple-browsers


【解决方案1】:

该标准没有定义最大长度,将实现留给浏览器和邮件客户端(参见 IETF RFC 2368)。

微软产品确实有限制:

其他浏览器可能会超出合理的电子邮件正文的长度。 iPhone 没有记录的限制,但可以处理最多 1MB 的文本。

支持数据url的现代浏览器(IE

【讨论】:

  • 链接到 iPhone mailto 长度测试:benzado.com/blog/post/28/iphone-openurl-limit
  • 谢谢。很遗憾没有更多关于 mailto 长度的信息,但是你给我的比我以前没有的要好:)
  • 请注意,“Microsoft Outlook Express”的最新版本是 2001 年,后来它被重命名为 Windows Mail/Windows Live Mail,我不确定它们是否有相同的限制。
  • 在我的 IE10 中,长度为 2054 的 mailto 链接失败,而长度为 2045 的邮件链接有效。
【解决方案2】:

对于带有 JS 控制台的浏览器,一个简单的测试:

for (var i=2014; i>1600; i--) {var good=1; try {location.href='mailto:?body='+'a'.repeat(i)} catch (e) {good=0;} if (good==1) {console.log(i+13);break;}}

(13代表mailto:?body=的长度。)

在 Firefox 32.0.3 上,这会产生 2008(主体长度 1995)。在 Thunderbird 31.2.0 上,所有 1,995 个字符都包含在新电子邮件的正文中。

Some say it's mainly OS-setting-dependent 但至少在 Windows 上,我找不到任何与 mailto 相关且数字接近 2,000 的注册表项。

【讨论】:

  • 这个脚本对我不起作用。在 Chrome 和 Firefox 中,它只是打印 i 的起始值加上 13。即使这个数字太大以至于页面本身内存不足。
  • @JHS,用最新的 FF 在 Linux 上验证了你的结果。我想一个更新破坏了我的测试方法,即尝试将window.location 设置为太长的 URL 不会像发布时那样引发错误。
  • 我使用的是 Ubuntu 14.04,并在 Firefox 和 Chrome 中进行了尝试,然后在带有 IE 和 Edge / Spartan 的 Windows 10 虚拟机上进行了尝试。我试图通过在您的原始脚本中放入非常大的数字来找到限制(从小处开始并逐步完善)。 Chrome 内存不足并显示“死页”屏幕,而 Firefox 一直在运行,直到进程停止响应。在大多数情况下,硬限制似乎仅由某些邮件客户端(例如 Outlook)强制执行。我不怀疑您的脚本在您编写它时有效。浏览器可能曾经有 URL 长度限制。
  • 在 Chrome 上,您的脚本给出了 2027 年。太聪明了。
【解决方案3】:

我刚刚做了一个从 Wolfram Mathematica 到 Microsoft Outlook 的实验。它适用于 31888 或更短的字符串长度。这是我在这个实验中使用的代码:

Table[ToString@RandomInteger[{0, 9}], 31433] //
     Partition[#, UpTo[80]] & //
    Map[StringJoin] //
   StringRiffle[#, "\n"] & //
  "mailto:xxxxxxx.xxxxxxx@xx.com?subject=Testing out mailto!&body="<> # & //
 Echo[#, "Total String Length", StringLength] & //
SystemOpen

并打印 31888 作为总字符串长度。如果将 31433 加 1,它将停止工作。

【讨论】:

    【解决方案4】:

    截至 2022 年,Outlook(无论如何是 2007 年)似乎在 Firefox 中使用 mailto 接受至少 8000 个字符的长查询字符串。然而,使用谷歌 Chrome 浏览器,Chrome 在 2000 年左右就失败了。最小的公分母似乎是 Chrome。太糟糕了,因为这已经是十多年的要求了。

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 2010-09-15
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多