我需要通过 java 发送邮件,其中 InternetAddress 的 Personal(发件人姓名)可以是任意 UTF8 字符串。由于我的电子邮件地址字符串可能包含或不包含个人信息,因此我仅使用 InternetAddress( String ) 构造函数来构建适当的 InternetAddress:
InternetAddress sender = new InternetAddress( "s\u00E8nder <from@example.org>" );
sender.setPersonal( sender.getPersonal(), Charsets.UTF_8.name() );
根据我的理解(因为测试似乎支持这一点),基本的 InternetAddress 构造函数不执行任何个人编码,所以我在一个额外的步骤中执行此操作,该步骤对符合 MIME 的个人进行编码。
我的问题是如果这个过程在某些情况下可能会失败,javadoc 说如果解码失败,.getPersonal() 可能会返回原始数据。但这真的会发生吗?如果它失败会导致任何麻烦,因为 javadoc 告诉 setPersonal 仅当它包含非 ASCII 时才进行编码,但 rawdata 不会这样做,对吗?