zoukankan      html  css  js  c++  java
  • 【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);
    

    这样写的原因:

    1. 保证在项目启动之后,该参数就被指定,避免启动之后某些操作提前初始化splitLongParameters=true。
  • 相关阅读:
    裂项相消
    斜率和问题
    抛物线与椭圆
    数列通项
    双曲线离心率
    优化问题
    单调性讨论
    角平分线
    隐零点
    自动任务调度系统
  • 原文地址:https://www.cnblogs.com/stxyg/p/14365978.html
Copyright © 2011-2022 走看看