我遇到类似described in this question的问题:我使用“mailto”协议从Java打开默认邮件客户端(我现在与Java 5绑定,所以很遗憾我不能使用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:foo@bar.com?subject=%E5%b9%B3">click me to test!</a>
</body>
</html>
简而言之,我如何说服Outlook在来自mailto链接时正确解释多字节字符?
编辑:回答约翰内斯的问题:我们有一个Java应用程序,可以在执行某些操作时发送电子邮件。每封电子邮件的标准文本都是从资源包中提取的,在大多数情况下,我们使用JavaMail API没有任何问题;但在这种情况下,要求用户能够在发送之前定制电子邮件。
如果有人可以建议使用非cmd.exe
方式产生相同的效果(主题和正文预填充的新邮件窗口) - 并且记住我们与Java 5绑定,那么桌面API很可悲不是一个选择 - 我会很开心!
答案 0 :(得分:1)
你可以试试这个:
有一个名为的选项:在Outlook @
中启用对mailto:protocol的UTF-8支持工具&gt;选项&gt;邮件格式&gt;国际选项&gt; [x]为mailto:protocol
启用UTF-8支持让我们希望它适合你
答案 1 :(得分:1)
在Windows Live Mail中,主题对我来说没问题,但收件人的显示名称没有。 当evertything是UTF-8编码时,Android工作正常,但Windows Live Mail在“收件人:”中显示一些符号,而“主题:”是正确的。当我使用UTF-16“To:”时,Windows Live Mail现在可以使用,但Android仍然可以将其作为UTF-8 ...
答案 2 :(得分:0)
您没有指定任何编码,因此Outlook(或向Outlook提供地址的人)只能猜测。如果是HTMl代码段,请尝试在<head>
中明确指定编码(UTF-8)是否会改变该行为。
就cmd而言,它无法真正应对UTF-8。尽管存在问题,它仍将Unicode作为UTF-16处理。
当我在这里尝试此操作时(Windows Live Mail,而不是Outlook),主题中的所有内容都会转换为旧版代码页,因此CJK应该存在问题。
但是,我想知道为什么你试图误用cmd
让用户写邮件。那里肯定有更好的选择(即使我现在不知道一个因为我从来不需要它)。
答案 3 :(得分:0)
我猜您的Java邮件工作正常但请确保尝试切换到JavaMail 。
查看this帖子。默认情况下,Outlook 2003无法正确识别HTML邮件的字符编码(在许多情况下),即使它们包含相应的标记:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
您可以切换到Outlook 2007和/或在编辑器中打开邮件并调整邮件属性:
编辑:问题更改后的更正。
编辑2:抱歉没有阅读完整的问题。
我发现你有Java 5约束,但如果实现也与Windows绑定,请考虑使用基于JNI / JNA的解决方案(遗憾的是我不能给你链接)。我还将了解OpenJDK的Desktop API实现并从中提取方法。
另一个选择是以某种方式传递消息而不用URLEncoding它?
此外,如果要求用户在发送之前自定义消息,您可以在应用程序中为该消息提供一个简单的编辑器,并仍然通过JavaMail发送消息。
您还可以提供为用户准备消息的合作方式,将其放在剪贴板上并为用户打开电子邮件客户端。然后用户只需要发出一个CTRL + V来粘贴准备好的文本。
答案 4 :(得分:0)
mailto:链接应使用RFC2047编码而不是UTF。 http://en.wikipedia.org/wiki/MIME
的mailto:?????me@example.com受试者== UTF8乙aGVsbG8 =