zoukankan      html  css  js  c++  java
  • SpringBoot开发案例之mail中文附件名字乱码

    最近在开发一个邮件发送多附件的微服务,使用的是org.springframework.mail.javamail.JavaMailSender;包下面的JavaMailSender

    但是发送出来的附件名字都是乱码格式,如下:

    跟进MimeBodyPart类,发现setFileName方法中有个ParameterList类,点击继续跟进ParameterList类,里面的toString方法:

    if ((value.length() > 60) && (splitLongParameters)
    
                            && (encodeParameters)) {
    
                        int seg = 0;
    
                        name = 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));
    
                    }
    

     

    上面这段代码的逻辑,大家应该可以很清晰的理解了吧,大家可以发现如果value.length() > 60 并且 splitLongParameters?哎,问题来了,splitLongParameters到底是个什么值,我们查找splitLongParameters,发现了其在类开头已经定义了

    private static final boolean splitLongParameters = PropUtil
    
                .getBooleanSystemProperty("mail.mime.splitlongparameters", true);

    大致意思就是,编码后的文件名长度如果大于60并且splitLongParameters的值为true,encodeParameters的值为true,文件名就会被截取,想想编码后的值被截取是什么样子?也只能是文章开头截图的显示了。

    最终的解决方案就是,在发送的时候初始化splitLongParameters为false不截取:

    static {
    
             System.setProperty("mail.mime.splitlongparameters","false");
    
        }
    

      

  • 相关阅读:
    安卓学习,参数的双向传递
    周进度报告(六)
    TensorFlow K近邻算法
    TensorFlow逻辑回归操作
    TensorFlow线性回归操作
    《出发吧一起》第二阶段个人总结——Day04
    《出发吧一起》第二阶段个人总结——Day03
    《出发吧一起》第二阶段个人总结——Day02
    《出发吧一起》第二阶段个人总结——Day01
    《一起》个人进展--Day10
  • 原文地址:https://www.cnblogs.com/baizhanshi/p/11453675.html
Copyright © 2011-2022 走看看