18

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

谢谢

4

10 回答 10

22

我刚刚花了 2 天时间调查这个问题。我们的问题是如果 subject= 字符串包含非 ascii 字符(例如挪威字符),我们的 utf-8 编码网页上的 mailto: 链接对 Outlook 用户不起作用。例如:“mailto:mail@coretrek.no?subject=julegløgg og få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(在带有 Outlook express 和 TB 2 的 WinXP 上的 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 编码的页面:

即:好的

FF -> Thunderbird:如果主题是 url 编码则失败,如果不是,则可以)

FF -> Outlook:如果主题不是 url 编码则失败,如果编码则正常)(这是 Windows,在 Ubuntu Linux FF 和 TB 上总是可以正常工作)。

希望这对其他有同样问题的人有所帮助。

于 2009-12-02T08:23:30.200 回答
10

在 PHP 中,我认为最适合 Outlook 的函数是 rawurlencode()

于 2010-05-11T17:33:42.430 回答
3

我认为使用 urlencode 方法应该可以满足您的需求。JavaScript 对字符串对象有 .encodeURI() 方法,而 .NET 有HttpUtility.UrlEncode方法。

您使用什么语言?

于 2009-06-12T15:43:00.327 回答
3

实际上,解决方案是http://blogs.msdn.com/ie/archive/2007/02/12/International-Mailto-URIs-in-IE7.aspx并不好。

基本上,在 IE 7 和 8 中,用户必须启用 Internet 选项中的高级设置,而 100% 的用户不会知道不会启用的东西。

于 2010-02-26T14:58:06.560 回答
2

rawurlencode()功能最适合 Outlook,在 Firefox、Chrome 和 IE 上测试

于 2011-11-11T07:14:31.197 回答
2

您需要为 mailto: 协议启用 UTF-8 支持

在 Outlook 主窗口中,单击工具 -> 选项 -> 邮件格式 -> 国际选项 -> “启用 UTF-8 支持 mailto: 协议”。

于 2011-01-31T02:11:45.337 回答
1

正如 yandr 所指出的,此问题是 Outlook 的一个持续问题。

Microsoft 已发布文档说明正确配置的 Outlook 2003 和 2007 附加到正确配置的 Exchange 服务器将默认支持 Unicode,但这并不能真正帮助您与公众。

作为参考,您要参考的“标准”是RFC 2047

我为解决这个限制(实际上是瑞典语)实施的解决方案是使用 Web 表单而不是 mailto: 链接。它需要在服务器端进行更多设置,但可以让您更好地控制联系过程。

我敢肯定这不是您想听到的,但是在全世界停止使用 Microsoft 的损坏软件之前,我们将继续需要这样的解决方法。

于 2011-12-07T22:55:42.077 回答
0

如果有人使用 SharePoint 2010,微软似乎已经意识到了这个问题,并提供了一些功能来解决这个问题。

以下将正确转义到当前页面的链接

escapeProperly(escapeProperlyCoreCore($(location).attr('href'), false, false, true))

于 2013-03-07T15:56:10.010 回答
0

听起来您需要包含 mailto 链接的页面采用 Outlook 期望的编码。在不了解情况的情况下,我会尝试使用 UTF-8 和 ISO-8859-1 对页面进行编码。

相关的“有关情况的更多信息”将是出现了什么奇怪的字符以及当前页面的编码是什么。

于 2009-06-12T15:16:48.127 回答
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}`);
于 2019-11-22T06:28:10.057 回答