解码文件附件的名称不适用于属性

时间:2013-03-18 15:06:29

标签: java javamail

我阅读了这份文件:

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");

所以如果文件名解码依赖于系统属性。有谁知道哪些属性?我没有试图尝试所有系统属性并解决它是哪一个

1 个答案:

答案 0 :(得分:1)

MimeMessage.getFileName

  

如果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