【问题标题】:mailto special characters邮寄到特殊字符
【发布时间】:2010-11-02 11:58:43
【问题描述】:

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

谢谢

【问题讨论】:

  • 我也有同样的问题。您可以选择一个答案或发布您自己的答案吗?

标签: html mailto


【解决方案1】:

我刚刚花了 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(在 WinXP 上的 IE7 上使用 Outlook express 和 TB 2 进行测试)。

但现在的问题实际上是 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 编码则失败,如果编码则正常) (这是 Windows,在 Ubuntu Linux FF 和 TB 上总是可以正常工作)。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 在尝试了各种其他方法之后,我自己才弄清楚了这一点。 +1
    • 像魅力一样工作:-)
    【解决方案3】:

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

    你使用什么语言?

    【讨论】:

    【解决方案4】:

    其实解决方法是http://blogs.msdn.com/ie/archive/2007/02/12/International-Mailto-URIs-in-IE7.aspx,也不是很好。

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 唉,当您设计的网站可能需要 mailto: 中的特殊字符时,您无法控制您希望点击链接的各种人员的配置。
      【解决方案6】:

      rawurlencode() 函数最适合 Outlook, 用 Firefox、Chrome 和 IE 测试

      【讨论】:

      • 这与 Mario Chueca 在 2010 年提供的答案相同。
      【解决方案7】:

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

      Microsoft 有 published documentation 声明正确配置的 Outlook 2003 和 2007 附加到正确配置的 Exchange 服务器将默认支持 Unicode,但这对普通大众并没有真正的帮助。

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

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

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

      【讨论】:

        【解决方案8】:

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

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

        【讨论】:

          【解决方案9】:

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

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

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

          【讨论】:

            【解决方案10】:

            在 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}`);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-11-11
              • 2014-08-14
              • 1970-01-01
              • 1970-01-01
              • 2021-01-27
              • 2017-06-15
              • 1970-01-01
              相关资源
              最近更新 更多