java - 使用 mailto : 时 Outlook 不处理多字节字符

标签 java windows command-line outlook

我有与described in this question类似的问题:我正在使用“mailto”协议(protocol)从 Java 打开默认邮件客户端(我现在与 Java 5 绑定(bind),所以遗憾的是我无法使用 Desktop API )。

部分电子邮件包含日语文本。字符串已采用 UTF-8 编码,如下所示:

private void email(String to, String subject, String body)
{
    String encodedSubject = URLEncoder.encode(subject, "UTF-8");
    String encodedBody = URLEncoder.encode(body, "UTF-8");

    String mailto = "mailto:" + to + "?subject=" + encodedSubject + 
        "&body=" + encodedBody;
    String cmd = "cmd.exe /c start \"\" \"" + mailto + "\"";
    Runtime.getRuntime().exec(cmd);
}

日语字符已正确编码为其 URL 等效项,因此“平”变为“%E5%B9%B3”,例如;但是,当 Outlook 打开新邮件窗口时,三字节字符会被解释为三个不同的字符 - 因此“%E5%B9%B3”会被解释为“å¹³”。

我相当确信问题出在 Outlook 上,因为以下 HTML 片段会产生相同的效果(SO 似乎不允许 mailto 位于标签内,因此我无法直接提供链接,抱歉):

<html>
    <body>
    <a href="mailto:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e6808989a6848794c885898b" rel="noreferrer noopener nofollow">[email protected]</a>?subject=%E5%b9%B3">click me to test!</a>
    </body>
</html>

简而言之,如何说服 Outlook 正确解释来自 mailto 链接的多字节字符?

编辑:回答 Johannes 的问题:我们有一个 Java 应用程序,可以在执行某些操作时发送电子邮件。每封电子邮件的标准文本都是从资源包中提取的,并且在大多数情况下我们使用 JavaMail API 没有任何问题;但在这种情况下,用户需要能够在发送之前定制电子邮件。

如果有人可以建议一种非cmd.exe方式来产生相同的效果(预填充主题和正文的新邮件窗口) - 并记住我们与Java 5相关,所以遗憾的是,桌面 API 不是一个选项 - 我会非常高兴!

最佳答案

你可以试试这个:

有一个选项名为:在 Outlook @ 中启用 mailto:protocol 的 UTF-8 支持

工具 > 选项 > 邮件格式 > 国际选项 > [x] 启用 mailto:protocol 的 UTF-8 支持

希望它对您有用

关于java - 使用 mailto : 时 Outlook 不处理多字节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974558/

相关文章:

javascript - 未捕获的语法错误 : Unexpected token ILLEGAL in main. js:4

java - Java中函数返回的写法

windows - 在Windows上安装LogStash

PHP 显示 CMD 命令提示符窗口 (Windows)

windows - I/O Performance Sanity Check - 检查文件是否存在

linux - 如何为 Windows 环境转换 rm 命令?

linux - 使用双引号执行 Linux 命令

java - Spring AOP 为 Java 8 提供 IllegalArgumentException

java多个线程同时将随机字节写入文件[只需要建议]

java - 方法 .toArray(IntFunction<A[]> Generator) 如何知道新数组的大小