0

我阅读了这份文档:

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

所以如果文件名正在解码也取决于系统属性。有谁知道哪些属性?我没有办法尝试所有系统属性并解决它是哪一个

4

1 回答 1

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.

于 2013-03-18T15:29:27.380 回答