【JAVA】javaMail附件名超过60显示错误
javaMail是我们java开发中常用的发邮件方式,但是会有某些
现象
附件名称无法正常展示,出现如:untitled,bat等不正确文件名。
分析
if (value.length() > 60 &&
splitLongParameters && encodeParameters) {
int seg = 0;
name += "*";
while (value.length() > 60) {
sb.addNV(name + seg, quote(value.substring(0, 60)));
value = value.substring(60);
seg++;
}
if (value.length() > 0)
sb.addNV(name + seg, quote(value));
} else {
sb.addNV(name, quote(value));
}
}
}
类的位置:javax.mail.internet.ParameterList#toString(int)
编码后的文件名长度超过60之后,并且splitLongParameters=true,encodeParameters=true的情况下或进行切断,导致文件名异常。
private static final boolean encodeParameters =
PropUtil.getBooleanSystemProperty("mail.mime.encodeparameters", true);
private static final boolean splitLongParameters =
PropUtil.getBooleanSystemProperty(
"mail.mime.splitlongparameters", true);
在没有设置mail.mime.splitlongparameters相应值的情况下,默认值为true,并且一经初始化不可再被修改,导致后续即使指定该值为false依然无效,最终文件名超长被截断。
解决方案
在项目启动是添加参数初始化该值
//解决附件名不能过长的问题
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
SpringApplication.run(AccountApplication.class, args);
这样写的原因:
- 保证在项目启动之后,该参数就被指定,避免启动之后某些操作提前初始化splitLongParameters=true。