邮件正文在IE中无法填充问题

7

我正在使用mailto让客户提交产品报价信息。我试图通过构建字符串形式的mailto链接并连接报价信息来自动填充报价到电子邮件正文中,以下是代码:

var quoteinfo = 'quote information here';
var link = '<a href="mailto:email?subject=subject&body=Please enter your contact information 
and message here: %0A%0A%0AQuote:%0A' + quoteinfo + '">email</a>';

然而,在使用IE时,当单击链接时,电子邮件会生成,但只有显式添加的文本出现--没有存储在quoteinfo变量中的任何内容显示。我已经验证了最终链接包含所有报价信息--它只是不出现在电子邮件中。由于电子邮件成功生成了部分文本,我不认为这是字符溢出问题(无论如何,即使在quoteinfo变量中只有30个字符,这种情况也会发生)。
也许这是一个特定于邮件客户端的问题?
最后一点:我非常清楚有一个流行的运动,旨在用表格替换mailto--由于其他原因,我不能在这里这样做,请不要建议切换到表格来回应。
我的链接将如下所示:
mailto:sales@optecinc.com?subject=Submission From Quote Creator &body=Please enter
your contact information and message here: %0A%0A%0AQuote:%0A#17350 - IFW 2-inch -
$829.00%0A

链接是否正确生成? - Oded
2
应该是href="mailto:..."而不是href="email:.."。 - Raoul
1
正确的 - 我不小心删除了它,以保护实际的电子邮件地址。现在已经修复了。 - CodeRedd
3个回答

13

在URL中,井号(#)具有特殊含义(记得锚点吗?例如:http://example.com#TopOfPage)。请将其替换为%23

查看W3的URL编码参考

更好的方法是,JavaScript可以通过encodeURI()函数为您完成此操作。

window.onload = function() {
  var eTo = encodeURI("sales@example.com");
  var eSubj = encodeURI("Submission From Quote Creator");
  var eBody = encodeURI("Please enter your contact information and message here: \n\n\nQuote:\n#17350  IFW 2-inch -$829.00\n");

  var email = "mailto:" + eTo + "?subject=" + eSubj + "&body=" + eBody;

  document.getElementById("sales").href = email;
}
<a href="" id="sales">email</a>


1
对于替换 # 号,%23 对我有效。encodeURI() 函数无效。 - ClearCloud8
@ClearCloud8 哎呀,我没有注意到 OP 的代码已经有编码的换行符了,所以 encodeURI 只会重新编码它们。我放了一个可运行的版本,设置了 mailto 链接,而不仅仅是像旧例子那样把它放在一个变量中。我还将它改为编码所有三个字段,而不仅仅是正文(这就是 OP 的问题所在)。你具体遇到了什么问题? - Gary
1
一旦我将 encodeURI 替换为 encodeURIComponent,在IE11中它对我起作用了。 - Michael

2

在这些线路中,您得出了错误的结论。首先消除动态链接生成,并使用静态HTML测试。如果这也不起作用,请发布确切的无法工作的链接。也许您的报价中有无效字符,您没有意识到。它是否以撇号开头?

从您上面的代码中,链接将看起来像这样:

<html>
  <body>

    <a href="mailto:someone@somewhere.com?subject=subject&body=Please enter your contact information and message here: %0A%0A%0AQuote:%0ARaaaawr">email</a>

  </body>
</html>

这个功能完全正常(测试过IE9,Outlook2007)。


1
尝试消除动态链接,但并没有奏效。我已经更改了示例以反映我生成的链接的具体情况。正如您所看到的,唯一使用的特殊字符是产品编号的井号和价格的美元符号。 - CodeRedd

0

除了将哈希符号(#)进行URL编码,如Fantabulum mentions所述,我建议检查客户端的使用情况。如果是Outlook(从您的标签选择中可以推断出),他们可能需要运行“检测和修复”(通常在帮助菜单中找到)。

运行“检测和修复”已经解决了我们内部网站上类似链接的许多问题。通常问题是由于文件/设置损坏或其他程序干扰Outlook导致的 - 例如,Windows更新还原了Outlook更改的注册表键。


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