正确的InternetAddress Personal编码方式

时间:2012-09-18 10:57:17

标签: java javamail

我需要通过java发送邮件,其中InternetAddress的个人(发件人姓名)可以是任意UTF8字符串。由于我的电子邮件地址字符串可能包含个人或非个人,我只使用InternetAddress(String)构造函数来构建适当的InternetAddress:

InternetAddress sender = new InternetAddress( "s\u00E8nder <from@example.org>" );
sender.setPersonal( sender.getPersonal(), Charsets.UTF_8.name() );

从我的理解(因为测试似乎支持这一点)开始,基本的InternetAddress构造函数不执行任何个人编码,所以我在另外一步中执行此操作,该步骤对Personal进行编码以符合MIME。

我的问题是,如果此过程在某些情况下可能失败,javadoc说.getPersonal()可能会在解码失败时返回原始数据。但这真的会发生吗? 如果它失败会导致任何麻烦,因为javadoc告诉setPersonal只在它包含非ASCII时进行编码,但是rawdata不会这样做,对吗?

1 个答案:

答案 0 :(得分:3)

您正在使用的构造函数假定地址字符串已经正确编码,就像您从电子邮件标题中读取它一样。您应该单独维护电子邮件地址和个人名称字段,并使用将它们作为单独参数的构造函数。如果您没有个人姓名,则可以传递null。

你可以使用toUnicodeString方法获取你正在使用的格式的字符串,但是无法解析这样的字符串。

相关问题