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

Java 解码文件附件的名称不适用于属性,java,jakarta-mail,Java,Jakarta Mail,我阅读了以下文档: 因此,我向mimessage添加了一些属性: Properties props = new Properties(); props.put("mail.mime.decodefilename", true); Session mailConnection = Session.getInstance(props, null); source = new FileInputStream(emlFile); MimeMessage m

我阅读了以下文档:

因此,我向mimessage添加了一些属性:

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");
所以,文件名是否解码也取决于系统属性。有人知道哪些房产吗?我没有办法尝试所有系统属性并解决它是哪一个

如果mail.mime.encodefilename系统属性设置为true,则 MimeUtility.decodeText方法将用于解码文件名


现在我们来看一下实现,这就是调用
getFileName
时,
MimeUtility.decodeText
是如何进入画面的:

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
,可能使用。

查看我的更新。尝试设置
mail.mime.decodefilename
而不是.thx。我尝试了所有可能的方法,这对我有帮助:props.put(“mail.mime.decodefilename”,“true”);用于的javadocs清楚地说明了这一点;向下滚动至属性的说明。还明确指出它是一个系统属性。对于编码,您需要设置
“mail.mime.encodefilename”
。抱歉,我的意思是“始终解码”。您可能应该将此作为一个新问题来问。我相信我的回答解决了你原来遇到的问题。