问题引入
在一次做发邮件功能时发现,邮件附件为xlsx文件,在网页登录接收邮箱时,附件正常,用foxmail或者网易邮箱大师客户端接收时,附件有问题,foxmail接收的附件为dat文件,网易邮箱大师接收的为bin文件,在网上查找的时候发现好像是因为附件名过长导致的。参考Java发送邮件Excel附件名称变为.dat文件,虽然我的附件名没超过60个字符,但是有中文,也出现了这个问题
问题解决
参考上文中的博客,需要在Spring 容器启动完成后加入下面设置:
System.setProperty("mail.mime.splitlongparameters","false");
我在系统中新建了一个类,实现了ApplicationListener<ContextRefreshedEvent>
接口,代码如下:
package config;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
public class SpringContextInitlized implements ApplicationListener<ContextRefreshedEvent>{
/** * <p>Title: onApplicationEvent</p> * <p>Description: </p> * @param arg0 */
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
//web系统中会初始化spring容器和servlet容器,这里给出判定,是spring容器的时候才进行设置
if(event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext")){
System.setProperty("mail.mime.splitlongparameters","false");
}
}
}
配置这个bean:
<bean class="config.SpringContextInitlized" id="springContextInitlized"/>
然后再测试发邮件,客户端中的附件显示正常。