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根据内容生成二维码