java 发送邮件,同时携带MultipartFile类型的附件

需求:Java 使用 JavaMailsender 发送邮件,并携带附件(Excel),附件类型为前端传入的 Multipart 类型

 

public void sendMail (MultipartFile multipartFile)  throws Exception{

  // 邮箱服务器,端口,密码

  JavaMailsender mailsender = new JavaMailsenderImpl();mailsender.setHost("服务器名");

  mailsender.setPort (16000);

  mailsender.setUsername( "用户名");mailsender.setPassword("密码");

 

  MimeMessage msg = mailsender.createMimeMessage()

  // 设置编妈,true表示为 multipart 邮件(必须设置为true,否则不能携带附件)

  MimeMessageHelper helper = new MimeMessageHelper(msg, true,"utf-8");

  helper.setTo("...@163.com" ) ; // 收件地址

  helper.setBcc(new InternetAddress(". . .@163.com", "接收人" , "utf-8")); // 抄送

  helper.setFrom( "sender@163.com","发送人"); // 发件人

  helper.setText( "邮件正文"); 

  helper.setSubject("邮件标题");

  // MultipartFile 转 File

  File file = MultipartFileToFile.multipartFileToFile(multipartFile);

   // 设置附件:第一个参数附件名,第二个参数附件

  helper .addAttachment("附件文件名",new FilesystemResource(file);

  // 发送邮件

  mailSender.send(msg);

       // 删除临时副件

  MultipartFileToFile.deleteTempFile(file);

}

 

/**
 * MultipartFile 转 File 相关工具类
 */

public class MultipartFileToFile {

   /**
  * MultipartFile 转 File
  *
  * @param file
  * @throws Exception
  */
  public static File multipartFileToFile(MultipartFile file) throws Exception {
    File toFile = null;
    if (file.equals("") || file.getSize() <= 0) {
      file = null;
    } else {
      InputStream ins = null;
      ins = file.getInputStream();
      toFile = new File(file.getOriginalFilename());
      inputStreamToFile(ins, toFile);
      ins.close();
    }
    return toFile;
  }

    /**
  * 获取流文件
  *
  * @param file 文件
  * @throws Exception 异常
  */

  private static void inputStreamToFile(InputStream ins, File file) {
    try {
      OutputStream os = new FileOutputStream(file);
      int bytesRead = 0;
      byte[] buffer = new byte[8192];
      while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
        os.write(buffer, 0, bytesRead);
      }
      os.close();
      ins.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

   /**
  * 删除本地临时文件
  * @param file 文件
  */
  public static void deleteTempFile(File file) {
    if (file != null) {
      File del = new File(file.toURI());
      del.delete();
    }
  }
}

 

觉得有用的点个赞吧!一起学习,谢谢

posted @ 2022-06-08 17:46  卡鲁索  阅读(777)  评论(0)    收藏  举报