如何绕过铬邮件的最大长度限制

how to get around chrome mailto maxlength limit

本文关键字:长度限制 何绕过      更新时间:2023-09-26

Chrome的mailto长度限制在2000个字符左右。这似乎足够了,但实际上它只够英语语言。因为长度是在encodeURI之后计算的。

。只有一个日文字符"。encodeURI('て')得到"%E3%81%A6",长度为9个字符。所以我只能在我的邮件内容中输入大约2000/9 = 200+日文字符。这实在太短了。

那么有没有办法绕过这个限制呢?安装chrome插件之类的东西是可以接受的。

任何建议都非常感谢。

编辑

我最终决定使用服务器端解决方案:创建一个弹出页面来模拟邮件客户端,包含收件人、抄送、主题、内容和发送按钮。用户单击发送按钮后,表单将被提交,服务器将为用户发送邮件

我对Firefox (Developer Edition 39.0a2, Windows XP)上任何大小的邮件链接都没有问题,但是Internet Explorer 8和Chrome不支持超过上述2000个字符左右的邮件链接。所以,我怀疑这是Windows特有的问题

这似乎是Microsoft Windows的问题。我已经尝试了以下,它工作良好与不同的浏览器(safari, chrome 30 &在mac os x.

windows中的

请求将被截断到大约2000个字符。无论使用哪个浏览器,都会发生这种情况。似乎windows对系统uri请求有大小限制

我已经尝试了从html <a href="mailto:?body=...和javascript document.location = encodeURI('mailto:?body=' + text)在消息体100k字符。

我把这两个例子放在这个小提琴

多年来,这个问题在StackOverflow上被提出了好几次,但没有一个可以接受的答案。服务器端解决方案并不总是可行的。

下面的解决方案可能是解决问题的最佳方法。Chrome/Edge的问题是"邮件"URL不能超过2000个编码字符。因此,我们首先测试它是否超过2000个字符,如果超过了,就复制"body"。将内容粘贴到剪贴板中,并将原始主体替换为要粘贴的说明。注意,如果有较大的"To/CC",您可能仍然会遇到问题。收件人列表。

function invokeMailClient(to,cc,subj,body) {
  let encodedBody = encodeURIComponent(body);
  let mailTo = "mailto:" + to + "?cc=" + cc + "&Subject=" + subj + "&body=";
  if (mailTo.length + encodedBody.length > 1995) {
    copyToClipboard(body);
    encodedBody = encodeURIComponent("** Please press Ctrl-A Ctrl-V    OR Right-Click and Paste the body template for this email **'n");
  }
  window.open(mailTo + encodedBody);
}
function copyToClipboard(str) {
  let el = document.createElement('textarea');
  el.value = str;
  document.body.appendChild(el);
  el.select();
  document.execCommand('copy');
  document.body.removeChild(el);
};
//TEST IT
let subj = "This is a test subject";
let to="johnDoe@michigan.gov";
let cc="janeDoe@stackoverflow.com";
//let body="small body -- no problem";
//invokeMailClient(to,cc,subj,body);
let body = "A quick brown fox jumps over the lazy dog'r'n".repeat(35); 
invokeMailClient(to,cc,subj,body); //large "body" -- copies to clipboard