javaMail直接发送附件,无须生成临时文件
以excel附件为例:
先引入依赖:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency>
邮件发送服务:
@Service
public class MailService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final JavaMailSender sender;
@Value("${spring.mail.username}")
private String from;
public MailService(JavaMailSender sender) {
this.sender = sender;
}
/**
* 利用helper设置各种邮件发送相关的信息
*/
private MimeMessageHelper setInfoByHelper(String to, String subject, String content, MimeMessage message)
throws MessagingException {
//true表示需要创建一个multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
return helper;
}
/**
* 发送带附件的邮件
* @param to 收件人列表
* @param subject 邮件标题
* @param content 邮件内容
* @param inputStreamSource 附件streamSource,可以这样获得:new ByteArrayResource(ByteArrayOutputStream.toByteArray());
* @param fileName 附件的文件名
*/
public void sendAttachmentsMail(String to, String subject, String content, InputStreamSource inputStreamSource, String fileName){
MimeMessage message = sender.createMimeMessage();
try {
MimeMessageHelper helper = setInfoByHelper(to, subject, content, message);
helper.addAttachment(fileName, inputStreamSource);
sender.send(message);
logger.debug("带附件的邮件已经发送。");
} catch (MessagingException e) {
logger.error("发送带附件的邮件时发生异常!", e);
}
}
}
方法调用(测试用例): 利用ByteArrayOutputStream把excel文件输出到bytes[]中,然后由ByteArrayResource包装起来传递给邮件服务。
下一篇:
java根据内容生成二维码
