日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

base64解密后乱码_血泪教训!记一个JavaMail 附件乱码的问题

發布時間:2025/3/12 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 base64解密后乱码_血泪教训!记一个JavaMail 附件乱码的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說到亂碼,很多人都遇到過,“哎呀,你這個編碼是不是UTF-8!”,“你這個會不會操作系統不一致導致的?”,“肯定是兩邊編碼不一致”。不過我們今天說的問題,還真不是這個問題導致的。

問題

用JavaMail 發郵件,帶上附件,閃電郵客戶端收到后,附件名有時亂碼,有時非亂碼。查看Java端代碼:

String name = MimeUtility.encodeText(name, null) + ".xlsx";messageBodyPart.setFileName(name);

貌似已經做過編碼轉換了。
令人感到奇怪的是,稍微改變附件名,亂碼就消失了。

發現

收集各種信息的時候,突然發現 Ubuntu的小伙伴 在 ThunderBird下收郵件表示沒有異常,Mac黨表示自帶的郵件工具收件也沒有問題。那是不是操作系統字符編碼問題呢? 可是遺憾的是,在corp 郵箱網頁版上,依舊是亂碼。 這時候初步懷疑是郵件系統不兼容的問題了,來看郵件源碼:

Content-Type: application/octet-stream; name*0="=?utf-8?B?6L+Q6JCl5ZGo5oql576O5a655b2p5aaG5YmN5Y+w5Y2V5ZOB6Z"; name*1="SA5ZSu?=.xls" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="=?utf-8?B?6L+Q6JCl5ZGo5oql576O5a655b2p5aaG5YmN5Y+w5Y2V5ZOB6Z"; filename*1="SA5ZSu?=.xls"

這串就是 有些系統亂碼有些系統 正常顯示的 郵件源碼。。
對比在閃電郵上的非亂碼郵件:

Content-Type: application/octet-stream; name="=?utf-8?B?5rWL6K+V?=.xlsx" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?B?5rWL6K+V?=.xlsx"

filename0,filename1 和 filename 的區別,猜測也許就是閃電郵這個客戶端不支持這種filename0,filename1 協議導致的問題。

分析

有了以上的想法,就開始來看源碼。
MimeBodyPart 這個類中的 setFileName 方法 用到一個 ParameterList 在ParameterList 的 toString 類中找到下面一段:

if (v instanceof MultiValue) {// ....ns = name + i + "*";//...}} else if (v instanceof Value) {/// ...} else {if (value.length() > 60 &&splitLongParameters && encodeParameters) {int seg = 0;name += "*";/// ....}

這個類在郵件附件屬于 MultiValue 會把 名字用name + i 隔開 ,在名字大于 60個字符的時候也會主動截斷,這也就是 javamail 中 附件的命名規則,名字太長會被截斷~~!
中文在base64 加密后,超過60個字符那是妥妥的有可能。這種截斷文件名的模式在某些客戶端,比如閃電郵中,并不能很好的支持。

解決

解決就很容易了, 代碼里有 splitLongParameters 這個參數, 觀察了下 對應于一個環境變量,如果想不截斷文件名,只要在程序運行之初加上:

System.setProperty("mail.mime.splitlongparameters","false");

就可以了。測試,解決。。。
另外由于發現了這個問題,google到了 java mail 的完整配置,
JAVA Mail System 環境變量 https://docs.oracle.com/javaee/6/api/javax/mail/internet/package-summary.html 包括是否自動編碼等配置,曾經沒怎么關注過。

總結

郵件系統的不兼容是導致這個錯誤的根本原因,還真不是編碼問題,所以有的時候看問題還不能那么想當然。這個測試未必能測出,畢竟要滿足名字足夠長這個條件。在這里分享這個問題,以免JAVA黨同學重復踩坑哦~

看到這里的小伙伴,如果你喜歡這篇文章的話,別忘了轉發、收藏、留言互動!
如果對文章有任何問題,歡迎在留言區和我交流~
最近我新整理了一些資料,包含面經分享、模擬試題、和視頻干貨,如果你需要的話,歡迎私信我~

總結

以上是生活随笔為你收集整理的base64解密后乱码_血泪教训!记一个JavaMail 附件乱码的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女啪啪网 | 中文在线观看av | 污视频网站免费在线观看 | 久久久久久久国产精品视频 | se综合| 国产福利一区在线观看 | 村上凉子av | 欧美美女啪啪 | 亚洲精品国产精品国自产 | 国产精品影院在线观看 | 亚洲天天 | 成人黄色三级视频 | 爱爱网站视频 | 欧美日韩一区二区三区在线 | 国产一二三级 | 奇米影视777在线观看 | 亚洲一级片 | 亚洲 激情 | 欧美特级a | 精品国产aⅴ | 日韩视频二区 | 大地资源影视在线播放观看高清视频 | 性色视频在线观看 | 欧美xxxx视频| 97精品视频在线观看 | 国产成人精品一区二区三区 | 成人中文视频 | 国产亚洲精品久久久 | 日韩中文字幕免费观看 | 国产区在线 | 国产精品69毛片高清亚洲 | 一区二区三区四区不卡 | 日本黄色xxx| 高h视频在线观看 | 国产日本欧美在线观看 | 成片在线观看 | 亚洲福利网 | 日韩草逼视频 | 两根大肉大捧一进一出好爽视频 | 中国白嫩丰满人妻videos | 日韩av在线直播 | 国产精品亚洲一区二区三区在线观看 | 国产毛片久久久 | 男女无遮挡做爰猛烈视频 | 国产美女又黄又爽又色视频免费 | 天天操综合网 | 国产在线专区 | 不卡视频一区 | 国产又色又爽又高潮免费 | 黑人黄色一级片 | 亚洲开心网 | 日日夜夜亚洲 | 久久久久久久久成人 | 亚洲综合网址 | 欧美日韩视频一区二区三区 | 久久色在线观看 | 91久久精品国产91久久性色tv | 伊人伊网 | 国产 xxxx| 女人的洗澡毛片毛多 | 特黄1级潘金莲 | 美女爆乳18禁www久久久久久 | 成人免费视频a | 欧美一级性视频 | 91美女在线视频 | 91成人在线观看喷潮蘑菇 | 国产一区二区三区免费观看 | 欧美激情h | 欧美a图| 免费av地址 | 色黄网站在线观看 | 国产精品久久久久久久久久小说 | 在线免费观看黄色小视频 | 玖玖热在线视频 | 亚洲欧洲精品成人久久奇米网 | 亚洲精品乱码久久久久久蜜桃欧美 | 色插综合 | 国产女主播在线 | 国产主播毛片 | 日本综合在线 | 精品国产一区二区在线 | 好爽又高潮了毛片 | 中文字幕久久久久久久 | 99精品视频国产 | 亚洲三级在线视频 | 精品国产免费观看 | 天堂网8| 欧美一区中文字幕 | 国精产品一区一区三区免费视频 | 黄色复仇草 | 欧美成人精品欧美一级乱 | 国产成人宗合 | 中文字幕精品久久久 | 91精品国产综合久久久久 | 亚洲国产精品狼友在线观看 | 私密spa按摩按到高潮 | 国产精品久久久精品三级 | 色婷婷久久一区二区三区麻豆 | 欧美午夜剧场 |