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 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
如何基于云服务器快速搭建网站及云盘系统?

