SpringBoot开发案例之mail中文附件名字乱码

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

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

 

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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不截取:

1
2
3
4
5
static {
 
         System.setProperty("mail.mime.splitlongparameters","false");
 
    }

  

posted @   jason.bai  阅读(1945)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示