全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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附件乱码  # javamail附件乱码  # SpringBoot整合JavaMail通过阿里云企业邮箱发送邮件的实现  # SpringBoot使用邮箱发送验证码实现注册功能  # SpringBoot中快速实现邮箱发送代码解析  # SpringBoot配置发送Email的示例代码  # SpringBoot配置Email发送功能实例  # SpringBoot添加Email发送功能及常见异常详解  # springboot整合mail实现邮箱的发送功能  # 值为  # 都是  # 就会  # 是个  # 如果你  # 来了  # 有个  # 这个问题  # 抱着  # 这段  # 不像  # 不存在  # 做过  # 你做  # 可有  # 试试看  # 是什么样子  # 大家多多  # 邮件发送  # 很清晰 


相关文章: 家庭建站与云服务器建站,如何选择更优?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  建站之星如何实现网站加密操作?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  制作表格网站有哪些,线上表格怎么弄?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  建站之星logo尺寸如何设置最合适?  如何用低价快速搭建高质量网站?  nginx修改上传文件大小限制的方法  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何批量查询域名的建站时间记录?  如何用花生壳三步快速搭建专属网站?  建站之星如何实现五合一智能建站与营销推广?  如何快速打造个性化非模板自助建站?  C#怎么使用委托和事件 C# delegate与event编程方法  如何通过西部数码建站助手快速创建专业网站?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  已有域名和空间,如何快速搭建网站?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何在Ubuntu系统下快速搭建WordPress个人网站?  ,网页ppt怎么弄成自己的ppt?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  如何选择适配移动端的WAP自助建站平台?  制作销售网站教学视频,销售网站有哪些?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  已有域名和空间如何快速搭建网站?  历史网站制作软件,华为如何找回被删除的网站?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Android使用GridView实现日历的简单功能  如何高效完成自助建站业务培训?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  网站制作软件有哪些,制图软件有哪些?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  专业公司网站制作公司,用什么语言做企业网站比较好?  如何快速建站并高效导出源代码?  建站上传速度慢?如何优化加速网站加载效率?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  个人网站制作流程图片大全,个人网站如何注销?  如何高效配置IIS服务器搭建网站?  建站之星如何优化SEO以实现高效排名?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。