原效果:
处理代码
在程序启动时设置:
public static void main(String[] args) {
//java mail发邮件是附件名过长默认会被截断,附件名显示【tcmime.29121.29517.50430.bin】,主动设为false可正常显示附件名
System.setProperty("mail.mime.splitlongparameters", "false");
SpringApplication.run(xxxApplication.class, args);
}
MimeMessageHelper helper = new MimeMessageHelper(message, true,"UTF-8");
和helper.addAttachment(MimeUtility.encodeWord(file.getFilename(),"utf-8","B"), file);
api解释
/**
* 发送一封带附件的模板邮件
* @param receiverName 邮件接收者,多个接收者以逗号隔开
* @param cc 抄送,多个接收者以逗号隔开
* @param subject 主题
* @param sendFileList 发送附件列表
* @param templateName 模板名
* @param model 传递到模板的值
*/
public void sendAttachmentsTemplateMailMail(String receiverName,String cc, String subject, List<File> sendFileList,String templateName,Map<String, Object> model) {
if(StringUtils.isEmpty(receiverName)){
throw new RuntimeException("没有邮件接受者");
}
MimeMessage message ;
try {
String sender = environment.getProperty("spring.mail.username");
message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true,"UTF-8");
helper.setFrom(sender);
helper.setTo(StringUtils.split(receiverName,","));
helper.setSubject(subject);
if(StringUtils.isNotEmpty(cc)){
helper.setCc(StringUtils.split(cc,","));
}
//读取 html 模板
Template template = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);
String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
helper.setText(html,true);
if(CollectionUtils.isNotEmpty(sendFileList)){
for(File sendFile : sendFileList){
if(sendFile == null || !sendFile.exists()){
throw new FileNotFoundException(sendFile+" sendFile不存在");
}
FileSystemResource file = new FileSystemResource(sendFile);
System.out.println(file.getFilename());
helper.addAttachment(MimeUtility.encodeWord(file.getFilename(),"utf-8","B"), file);
}
}
} catch (Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
mailSender.send(message);
}