javamail发送带附件邮件,附件名称字节多长,导致附件名称在邮件客户端拿不到或者乱码的问题

  • 上网查了一大堆,都是说调用MimeUtility.encodeText()或者.MimeUtility.encodeWord()方法,但是然并卵。

 我先跟大家细说一下这是个什么情况吧,比如说通过开发的手机端邮箱功能,发送附件,附件名称类似下边图片这种:

接着我们发送邮件,包含图上所示的附件,OK,我们发送成功了(这个过程就不给大家展示了,哈哈...)

然后我们打开邮箱客户端,查看附件,WTF,这是个什么鬼,我的邮件名称不见了。

刚开始我是真的是一个字符的增加的去试,最终只有一个结果,就是单字节降低到一定程度的话,邮箱客户能正常显示附件名称了,妈呀,这谁能受得了,各种打断点,确认了这压根不是编码的问题呀,真是坑爹。

后来实在没办法,硬着头皮看源码呗,一看了不得呀,在MimeBodyPart的setFileName()方法中发现了一个ParameterList ,

这个类是干嘛地呀,说白了就是一个附件name的集合,那么重点来,我们看一下这个的类的toString()方法

 这个方法的最后十几行代码,把这次事故都交代清楚了,罪魁祸首就是他。

fileName如果太长,超过60个字符,会被截断,截断....javamaila的这命名规范也太恶了吧,60个字符就给截断了,对开发来说,随便搞个name,随便base64一下,这长度您敢想,超过60岂不是很随意。

重点来了,既然问题来了,那么怎么解决呢,很简单:

既然你要截断,那我就不让你截断,我们发现截断的条件,1,字符超过60;2,splitLongParameters =true;3,encodeParameters=true;

我想大家从字面上都是知道splitLongParameters这个是啥意思了吧,就是分裂、截断,终于找到根源了,那么干掉他:

在Application里边加上一行代码: System.setProperty("mail.mime.splitlongparameters","false");

OK,解决了,在这里建议大家,在开发邮箱的时候,多注意一下javamail的环境变量的配置,环境变量地址

好了,今天就写到这里了,如果有什么问题,可以评论哦。

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值