附件名称过长会乱码,
原因是mail.mime.splitlongparameters参数是true,
需要在spring启动加载的时候,把参数值设置为false。
package cn.com.sinosure.seplatform.common.interceptor;
import javax.inject.Named;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
@Named
public class ApplicationContextListener implements ApplicationListener<ContextRefreshedEvent>{
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if (event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext")) {
System.out.println("system property init start");
System.getProperties().setProperty("mail.mime.splitlongparameters", "false"); // 会默认为 true,会截断附件名
System.out.println("system property init param:" + System.getProperty("mail.mime.splitlongparameters"));
}
}
}
发送附件
/**
* 发送邮件,带附件
* @param subject 邮件标题
* @param content 邮件内容
* @param receivers 收件人邮箱
* @param stream 附件的文件流
* @param fileName 附件名称
* @param fileMimeType 附件类型: application/vnd.ms-excel;application/pdf;application/msword
* @throws Exception
*/
public void sendEmail(String subject,String content, String receivers, InputStream stream,String fileName,String fileMimeType) throws Exception {
if(Strings.isEmpty(subject)){throw new Exception("邮件主题为空");}
if(Strings.isEmpty(content)){throw new Exception("邮件正文为空");}
if(Strings.isEmpty(receivers)){throw new Exception("接收人为空");}
try {
// 组装邮件数据
String mailMimeSplite = System.getProperty("mail.mime.splitlongparameters");
logger.info("发送邮件,mail.mime.splitlongparameters 配置{},文件名:{}", mailMimeSplite,fileName);
MimeMessage mimeMessage = bizMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");
helper.setSubject(subject);
helper.setFrom(sender);
helper.setTo(receivers.split(";"));
helper.setText(content, true);
// 加载文件资源,作为附件
if (stream != null && fileName != null && fileMimeType != null) {
helper.addAttachment(fileName, new ByteArrayResource(IOUtils.toByteArray(stream)), fileMimeType);
}
logger.info("发送邮件客户列表 = {};内容 content {}",receivers,content);
// 发送邮件
bizMailSender.send(mimeMessage);
logger.info("发送邮件成功");
} finally {
if (stream != null) {
stream.close();
}
}
}