mailto特殊字符

时间:2009-06-12 15:12:42

标签: html mailto

有没有办法让电子邮件客户端(Outlook)接受来自html中mailto链接的特殊字符?我正在尝试使用正文中的德语字符进行mailto链接,但在Outlook中我只能获得奇怪的字符。

由于

10 个答案:

答案 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”服务的链接,如下所示:

http://url.com/service.php?service=util.mailtoencode&mailto=mail%40coretrek.no%3Fsubject%3Demne+%C3%B8%C3%A6%C3%A5+emne

此页面将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}`);