当前位置:   article > 正文

Java 实现简单邮件发送(带附件)_javamail发送邮件带附件

javamail发送邮件带附件

目录

前言

一、添加pom依赖

二、完整发邮件代码


前言

最近写发邮件的功能时,需要把excel文件和邮件内容一起发送,简单记录!


一、添加pom依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-mail</artifactId>
  4. </dependency>

二、完整发邮件代码

通过流的方式传入到方法中,然后再把附件加到邮件上

  1. public class javaMail {
  2. public static String host="smtp";
  3. public static String port="465";
  4. public static String username="admin@163.com";
  5. public static String password="";
  6. /**
  7. * 发送带附件的邮件
  8. * @param receiver 发件人
  9. * @param title 主题
  10. * @param content 邮件内容
  11. * @param fileName 附件名
  12. * @param inputstream 附件流
  13. * @throws Exception
  14. */
  15. public void sendEmail(String receiver, String title, String content, String fileName, ByteArrayInputStream inputstream) throws Exception {
  16. // 加载配置文件
  17. Properties props = new Properties();
  18. try {
  19. props.put("mail.smtp.ssl.trust", host);
  20. props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
  21. props.setProperty("mail.smtp.host", host); // 发件人的邮箱的 SMTP 服务器地址
  22. props.setProperty("mail.smtp.auth", "true"); // 需要请求认证
  23. // port SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
  24. // 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
  25. // QQ邮箱的SMTP(SLL)端口为465或587)
  26. props.setProperty("mail.smtp.port", port);
  27. props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  28. props.setProperty("mail.smtp.socketFactory.fallback", "false");
  29. props.setProperty("mail.smtp.socketFactory.port", port);
  30. // log.info(props.get("mail.smtp.ssl.trust").toString());
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. //log.debug(e.getMessage());
  34. }
  35. Session session = Session.getDefaultInstance(props);
  36. session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log
  37. try {
  38. // 根据 Session 获取邮件传输对象
  39. Transport transport = session.getTransport();
  40. MimeMessage message = new MimeMessage(session);
  41. // 创建 MimeMessageHelper 对象
  42. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true, "utf-8");
  43. // 设置发件人地址
  44. mimeMessageHelper.setFrom(new InternetAddress(username));
  45. InternetAddress[] tos=InternetAddress.parse(receiver);
  46. // 设置收件人地址
  47. mimeMessageHelper.setTo(tos);
  48. // 设置主题
  49. mimeMessageHelper.setSubject(title);
  50. // 设置 消息内容
  51. //MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
  52. // Multipart mainPart = new MimeMultipart(); //HTML 格式
  53. MimeMultipart contentMultipart=new MimeMultipart("related");
  54. // 创建一个包含HTML内容的MimeBodyPart
  55. BodyPart html = new MimeBodyPart();
  56. // 设置HTML内容
  57. html.setContent(content, "text/html; charset=utf-8");
  58. contentMultipart.addBodyPart(html);
  59. //附件部分
  60. //可以设置多个附件
  61. if(StringUtils.isNotBlank(fileName))
  62. {
  63. MimeBodyPart excelBodyPart=new MimeBodyPart();
  64. DataSource dataSource=new ByteArrayDataSource(inputstream, "application/excel");
  65. DataHandler dataHandler=new DataHandler(dataSource);
  66. excelBodyPart.setDataHandler(dataHandler);
  67. excelBodyPart.setFileName(MimeUtility.encodeText(fileName));
  68. contentMultipart.addBodyPart(excelBodyPart);
  69. }
  70. // 将MiniMultipart对象设置为邮件内容
  71. message.setContent(contentMultipart);
  72. // 发送消息
  73. transport.connect(username, password);
  74. // 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
  75. transport.sendMessage(message, message.getAllRecipients());
  76. // 关闭连接
  77. transport.close();
  78. } catch (MessagingException | UnsupportedEncodingException e) {
  79. e.printStackTrace();
  80. throw new RuntimeException(e.getMessage());
  81. }
  82. }
  83. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/591751
推荐阅读
相关标签
  

闽ICP备14008679号