Java 解码文件附件的名称不适用于属性
我阅读了以下文档: 因此,我向mimessage添加了一些属性: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
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”
。抱歉,我的意思是“始终解码”。您可能应该将此作为一个新问题来问。我相信我的回答解决了你原来遇到的问题。