我阅读了这份文件:
http://docs.oracle.com/javaee/6/api/javax/mail/internet/package-summary.html
所以我向mimeMessage添加了一些属性:
Properties props = new Properties();
props.put("mail.mime.decodefilename", true);
Session mailConnection = Session.getInstance(props, null);
source = new FileInputStream(emlFile);
MimeMessage message = new MimeMessage(mailConnection, source);
现在我期待该方法bodyPart.getFileName()
返回正确的文件名。但是使用这种配置它仍然无法工作,我需要调用mimeUtils:MimeUtility.decodeText
- 我不想要的。我也试试:
props.put("mail.mime.decodefilename", "true");
但没有成功。那么我做错了什么?
更新:
在调试之后我得到了这个解决方案:这是有效的
Properties props = System.getProperties();
props.put("mail.mime.decodefilename", "true");
这不起作用:
Properties props = new Properites();
props.put("mail.mime.decodefilename", "true");
所以如果文件名解码依赖于系统属性。有谁知道哪些属性?我没有试图尝试所有系统属性并解决它是哪一个
答案 0 :(得分:1)
如果mail.mime.encodefilename系统属性设置为true,则 MimeUtility.decodeText方法将用于解码文件名。
现在,当我们看一下实现时,MimeUtility.decodeText
调用期间getFileName
就会出现这种情况:
if (decodeFileName && filename != null) {
try {
filename = MimeUtility.decodeText(filename);
} catch (UnsupportedEncodingException ex) {
throw new MessagingException("Can't decode filename", ex);
}
}
decodeFileName
的初始化位置如下:
s = System.getProperty("mail.mime.decodefilename");
// default to false
decodeFileName = s != null && !s.equalsIgnoreCase("false");
javadoc
似乎与实施相冲突。
因此,请尝试设置mail.mime.decodefilename
而不是mail.mime.encodefilename
,可能使用System.setProperty
。