SpringBoot mail中文附件乱码的解决方法

发布时间 - 2026-01-11 03:25:37    点击率:

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

咋一看不像乱码,抱着试试看的态度,为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实现邮箱的发送功能  # 值为  # 都是  # 就会  # 是个  # 如果你  # 来了  # 有个  # 这个问题  # 抱着  # 这段  # 不像  # 不存在  # 做过  # 你做  # 可有  # 试试看  # 是什么样子  # 大家多多  # 邮件发送  # 很清晰 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  网站优化排名时,需要考虑哪些问题呢?  JavaScript实现Fly Bird小游戏  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  微信小程序 input输入框控件详解及实例(多种示例)  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何撰写建站申请书?关键要点有哪些?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  新三国志曹操传主线渭水交兵攻略  如何快速搭建个人网站并优化SEO?  Mybatis 中的insertOrUpdate操作  Laravel中的Facade(门面)到底是什么原理  Angular 表单中正确绑定输入值以确保提交与验证正常工作  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  太平洋网站制作公司,网络用语太平洋是什么意思?  如何快速搭建高效可靠的建站解决方案?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  手机软键盘弹出时影响布局的解决方法  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  想要更高端的建设网站,这些原则一定要坚持!  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  网站建设整体流程解析,建站其实很容易!  java ZXing生成二维码及条码实例分享  如何用y主机助手快速搭建网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  奇安信“盘古石”团队突破 iOS 26.1 提权  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  如何快速完成中国万网建站详细流程?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何挑选最适合建站的高性能VPS主机?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  大连 网站制作,大连天途有线官网?  微信小程序 闭包写法详细介绍  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  如何基于云服务器快速搭建网站及云盘系统?