一、邮件附件变成bin格式
Java 发送邮件时,邮件附件变成.bin后缀的文件
如下图:
出现这个问题,博主查阅了其他博主的文章,大致是附件名称过长或附件名称携带中文
博主代码中采用的是中文加UUID的一个拼接。如下:
//生成随机的UUID
String uuid = IdWorker.get32UUID();
String file = "核价单" + uuid+ ".pdf"
博主翻看了MimeBodyPart类的源码,发现setFileName中有个getParameterList方法,继续跟进会发现他里面做了一层判断,如下图:
意思大致就是长度大于60并且splitLongParameters、encodeParameters为true时,文件名就会被截取,然后在进行转码就会变成开头我们说的格式了,然后我们找一下splitLongParameters,其实在开头已经被定义为true
解决方案:初始化时我们将这个值变为false,并缩短了附件名字
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
System.getProperties().setProperty("mail.mime.charset", "UTF-8");
String randomAlphanumeric = RandomStringUtils.randomAlphanumeric(6);
String file = "核价单" + randomAlphanumeric + ".pdf";
二、项目部署阿里云服务器出现报错
报错如下:Got bad greeting from SMTP host: smtp.exmail.qq.com, port: 465, response: [EOF]. Failed messages: javax.mail.MessagingException: Got bad greeting from SMTP host: smtp.exmail.qq.com, port: 465, response: [EOF]
本地可以发送正常,上传阿里云服务器就是不可以,后来发现代码中没有配置ssl连接方式。
配置如下:
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory