SpringBoot使用JavaMail导出流文件方案

在项目中,我们可能遇到使用邮箱导出文件的场景,在构建文件过程中有两种,一种是服务器或者其他地方有路径,可以获取文件流;一种是我们不想构建文件路径,只想使用流直接导出文件的情况,由于第一种相对简单,我这里只处理构建流导出方案。

前期准备

  1. 新建一个springboot项目
  2. 在pom文件中引入JavaMail的依赖

    org.springframework.boot
    spring-boot-starter-mail

  1. 编写邮件发送的代码
    @Autowired
    private JavaMailSender mailSender;

    /**
     * 使用JavaMail导出带附件的字节流邮件
     * @param subject 邮件主题
     * @param fromEmail 发送的邮箱地址
     * @param toEmail 收件的邮箱地址
     * @param bodyContent 邮件正文内容
     * @param fileName 导出到邮箱的附件名称
     * @param attachmentByteArray 导出的文件字节数据
     */
    @Override
    public void exportAttachment(String subject, String fromEmail, String toEmail, String bodyContent, String fileName, byte[] attachmentByteArray) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            mimeMessage.setFrom(fromEmail);
            mimeMessage.setRecipients(Message.RecipientType.TO, toEmail);
            mimeMessage.setSubject(subject);

            MimeMultipart contentMultipart = new MimeMultipart("mixed");
            // 创建附件
            MimeBodyPart excelBodyPart = new MimeBodyPart();
            DataSource dataSource = new ByteArrayDataSource(attachmentByteArray, "application/octet-stream");
            DataHandler dataHandler = new DataHandler(dataSource);
            excelBodyPart.setFileName(fileName);
            excelBodyPart.setDataHandler(dataHandler);

            // 正文内容
            MimeBodyPart textBodyPart = new MimeBodyPart();
            textBodyPart.setText(bodyContent);

            contentMultipart.addBodyPart(excelBodyPart);
            contentMultipart.addBodyPart(textBodyPart);
            mimeMessage.setContent(contentMultipart);
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            throw new BizException("邮件发送失败");
        }
    }

你可能感兴趣的:(SpringBoot使用JavaMail导出流文件方案)