项目中有一个需求,需要给内部用户邮箱发送附件,直接贴代码:
public void sendAnnex(List<String> to, String fileName, String title, String text, ByteArrayOutputStream os){
//防止中文名字 base64加密以后 名字太长被截断 导致中文乱码问题
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(username);
String[] tos = to.toArray(new String[to.size()]);
helper.setTo(tos);
if (StringUtils.isNotBlank(title)){
helper.setSubject(title);
}else {
helper.setSubject("统计数据");
}
if (StringUtils.isNotBlank(text)){
helper.setText(text, true);
}else {
helper.setText("附件", true);
}
InputStreamSource iss = new ByteArrayResource(os.toByteArray());
helper.addAttachment(MimeUtility.decodeText(fileName), iss);
javaMailSender.send(message);
} catch (MessagingException e) {
log.error("邮件发送附件异常:" + e.getMessage());
} catch (UnsupportedEncodingException e) {
log.error("邮件发送附件异常:" + e.getMessage());
}
}
实现:
- 实现给多个邮箱发送:seTo(String []) 实现
- 以流的形式发送:
ByteArrayOutputStream os = new ByteArrayOutputStream(1000);
- 附件名字为中文乱码问题:添加
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");