SpringBoot开发案例之mail中文附件乱码
前一段时间做过一个邮件发送的服务,以前大体都测试过,文本、图片、附件都是没有问题的,可有同事反应发送的附件名称有中文乱码,类似如下截图展示:

咋一看不像乱码,抱着试试看的态度,为MimeMessageHelper硬性加了编码:
helper.addAttachment(MimeUtility.encodeText(fileName), file);
并且对文件名称加了转码:
MimeUtility.encodeText(attachmentFilename)
但是,如果你跟进源码会发现spring已经为你做了转码工作,所以这个问题不存在的。
继续跟进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");
}
SpringBoot开发案例之mail中文附件乱码的更多相关文章
- SpringBoot开发案例之mail中文附件名字乱码
最近在开发一个邮件发送多附件的微服务,使用的是org.springframework.mail.javamail.JavaMailSender;包下面的JavaMailSender 但是发送出来的附件 ...
- openerp 7.0邮件接收中文附件乱码问题解决办法
openerp 7.0邮件接收中文附件乱码问题解决办法: 修改文件\addons\mail\mail_thread.py #1064 line插入代码: h=email.Header.Header(n ...
- SpringBoot开发案例之多任务并行+线程池处理
前言 前几篇文章着重介绍了后端服务数据库和多线程并行处理优化,并示例了改造前后的伪代码逻辑.当然了,优化是无止境的,前人栽树后人乘凉.作为我们开发者来说,既然站在了巨人的肩膀上,就要写出更加优化的程序 ...
- SpringBoot开发案例从0到1构建分布式秒杀系统
前言 最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路.俗话说,脱离案例讲架构都是耍流氓,最终使用SpringBoot模拟实现了部分秒杀场 ...
- SpringBoot开发案例之打造私有云网盘
前言 最近在做工作流的事情,正好有个需求,要添加一个附件上传的功能,曾找过不少上传插件,都不是特别满意.无意中发现一个很好用的开源web文件管理器插件 elfinder,功能比较完善,社区也很活跃,还 ...
- SpringBoot开发案例之整合Activiti工作流引擎
前言 JBPM是目前市场上主流开源工作引擎之一,在创建者Tom Baeyens离开JBoss后,JBPM的下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过,目前官 ...
- SpringBoot开发案例之整合Dubbo分布式服务
前言 在 SpringBoot 很火热的时候,阿里巴巴的分布式框架 Dubbo 不知是处于什么考虑,在停更N年之后终于进行维护了.在之前的微服务中,使用的是当当维护的版本 Dubbox,整合方式也是使 ...
- SpringBoot开发案例之整合Kafka实现消息队列
前言 最近在做一款秒杀的案例,涉及到了同步锁.数据库锁.分布式锁.进程内队列以及分布式消息队列,这里对SpringBoot集成Kafka实现消息队列做一个简单的记录. Kafka简介 Kafka是由A ...
- Yii2.0 发送邮件时中文附件乱码的问题
yii自带的邮件类使用的是MIME 协议,发送附件时用的是MIME 协议的 Content-disposition扩展,用扩展下载中文名称的附件时有时会正常,有时会乱码. 只需找到如下文件 的如下方法 ...
随机推荐
- “最美天气”版本II
抓取实时天气前需要首先获得所有地区的cityCode,因为在最后queryWeather的时候需要传递这个参数. 最美天气获取全部cityCode及cityName的方法: 1.获取34个省及直辖市的 ...
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...
- Android事件传递机制详解及最新源码分析——Activity篇
版权声明:本文出自汪磊的博客,转载请务必注明出处. 在前两篇我们共同探讨了事件传递机制<View篇>与<ViewGroup篇>,我们知道View触摸事件是ViewGroup传递 ...
- 走近RDD
RDD(Resilient Distributed Datasets)弹性分布式数据集.RDD可以看成是一个简单的"数组",对其进行操作也只需要调用有限的"数组" ...
- 搭建LAMP及wordpress
author:JevonWei 版权声明:原创作品 安装软件包 [root@danran ~]# yum -y install httpd mariadb-server mariadb php php ...
- [转]Java7中的ForkJoin并发框架初探(下)—— ForkJoin的应用
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp86 前两篇文章已经对Fork Join的设计和JDK中源码的简要分析 ...
- 规则集Set与线性表List性能分析
前言 本章节将通过实验,测试规则集与线性表的性能.那么如何进行实验呢?针对不同的集合都进行指定数量元素的添加和删除操作,计算耗费时间进行分析. 那么,前两个章节呢,我们分别讲述了什么时候使用Set以及 ...
- Ubuntu linux安装putty
Step1 安装Putty $ sudo apt-get install putty Step2 使用Putty Client 查找已经安装完的putty客户端 设置Remote Server的IP地 ...
- 团队作业8——第二次项目冲刺(Beta阶段) 5.19
Day1--5.19 1.展开站立式会议(拍摄者:武健男): 会议内容:(1)新成员自我介绍,使大家能更快熟悉并一起合作. (2)由于我们之前的项目经理去了别的小组,所以我们投票选取新成员林乔桦作为我 ...
- 201521123113《Java程序设计》第8周学习总结
1. 本周学习总结 2. 书面作业 本次作业题集集合 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 remove函数中,开始我的写法是 for(int i=0;i<list.s ...