有没有办法让电子邮件客户端(Outlook)接受来自html中mailto链接的特殊字符?我正在尝试使用正文中的德语字符进行mailto链接,但在Outlook中我只能获得奇怪的字符。
由于
答案 0 :(得分:19)
我花了2天时间调查这个问题。我们的问题是,如果subject = string包含非ascii字符,例如挪威字符,则我们的utf-8编码网页上的mailto:链接对Outlook用户不起作用。一个例子是: “mailto:mail@coretrek.no?subject =julegløggogårikål”
据我所知,到目前为止,Outlook根本不处理ASCII和iso-8859-1字符以外的任何内容。因此,当尝试单击上面的mailto链接(来自IE或Firefox)时,Outlook无法解码字符,使主题损坏并包含“怪异”字符。
所以下一步是尝试重新编码ISO-8859-1中的页面。我们所做的是将utf-8页面上的原始mailto链接替换为“email-to-iso”服务的链接,如下所示:
此页面将mailto字符转换为iso-8859-1,然后在iso-8859-1中输出整个页面内容。页面上包含“location.href ='mailto:...'”的javascript用于自动打开客户端的电子邮件客户端。
到目前为止一切似乎都没问题。这实际上适用于Internet Explorer,包括Thunderbird和Outlook(在WinXP上使用Outlook Express和TB 2在IE7上测试)。
但现在的问题实际上是Firefox。似乎Firefox无法解码包含仅在ISO-8859-1中找到但不在ASCII中的字符的url编码的URL(如挪威语,在编码时由%E5表示)。如果页面编码为utf-8,则处理相同,但似乎Firefox开发人员忘记与ISO-8859-1字符集一起测试特殊字符。 结果是Firefox将未解码的字符串(仍然包含%E5而不是å)传递给电子邮件客户端。而且,令人惊讶的是,这是由Outlook(它设法解码字符串本身)处理的,但不是Thunderbird,它可能与Firefox有相同的错误。如果您不对URL进行主题编码,则会将字符串正确传递给Thunderbird,但不会传递给Outlook。
我们一直在尝试其他编码方法,如php的htmlentities,htmlspecialchars,base64编码等,但所有这些方法都失败了。
所以,总结一下:
以utf-8编码的页面:
IE总是失败
FF - >雷鸟:好的
FF - >展望:失败
以iso-8859-1编码的页面:
IE:好的
FF - > Thunderbird:如果主题是url编码则失败,如果不是,则为OK)
FF - > Outlook:如果主题不是url编码则失败,如果编码则ok (这是Windows,在Ubuntu Linux FF和TB上工作正常)。
希望这对其他有同样问题的人有帮助。
答案 1 :(得分:10)
在PHP中,我认为最适合Outlook的功能是rawurlencode()
答案 2 :(得分:3)
我认为使用urlencode方法应该做你想要的。 JavaScript在字符串对象上有.encodeURI()方法,而.NET有HttpUtility.UrlEncode方法。
您使用的是哪种语言?
答案 3 :(得分:3)
实际上,解决方案是http://blogs.msdn.com/ie/archive/2007/02/12/International-Mailto-URIs-in-IE7.aspx并且不太好。
基本上,在IE 7和8中,用户必须在“Internet选项”中启用了高级设置,这是100%用户不知道的,不会启用的。
答案 4 :(得分:2)
您需要为mailto:protocol
启用UTF-8支持在主展望窗口中,点击工具 - >选项 - >邮件格式 - >国际选项 - > “为mailto:protocol启用UTF-8支持”。
答案 5 :(得分:2)
rawurlencode()
函数最适合outlook,
用Firefox,Chrome和& S测试IE
答案 6 :(得分:1)
正如yandr所指出的,这个问题一直是Outlook的问题。
Microsoft已published documentation指出正确配置的Outlook 2003和2007连接到正确配置的Exchange服务器将默认支持Unicode,但这并不能帮助您普通公众。
作为参考,您想要引用的“标准”是RFC 2047。
我实现的解决此限制的解决方案(实际上是使用瑞典语)是使用Web表单而不是mailto:链接。它需要在服务器端进行更多设置,但可以让您更好地控制联系过程。
我确信这不是你想听到的,但在全世界停止使用微软破坏的软件之前,我们将继续需要这样的解决方法。
答案 7 :(得分:0)
听起来您需要包含mailto链接的页面处于Outlook期望的编码中。在不了解情况的情况下,我会尝试使用UTF-8和ISO-8859-1对页面进行编码。
相关的“更多关于情况”的内容将是奇怪的字符出现以及页面的编码目前是什么。
答案 8 :(得分:0)
如果使用SharePoint 2010,似乎Microsoft已经意识到这个问题,并提供了一些功能来解决这个问题。
以下内容将正确转义指向当前页面的链接
escapeProperly(escapeProperlyCoreCore($(location).attr('href'),false,false,true))
答案 9 :(得分:0)
在JavaScript中,您可以将encodeURIComponent
函数用于主题和正文。然后它将显示电子邮件中的所有特殊字符。
const emailRequest = {
to: "abc@xyz.com",
cc: "abc@xyz.com",
subject: "Email Request - for <CompanyName>",
body: `Hi All, \r\n \r\n This is my company <CompanyName>
\r\n Thanks`,
};
const subject = encodeURIComponent(emailRequest.subject.replace("<CompanyName>", 'ABC & ** Company'));
const body = encodeURIComponent(emailRequest.body.replace("<CompanyName>", 'ABC & ** Company'));
window.location.href = (`mailto:${emailRequest.to}?cc=${emailRequest.cc}&subject=${subject}&body=${body}`);