当前位置:   article > 正文

Java 基于javaMail的邮件发送(支持附件)_javamail发送邮件带附件

javamail发送邮件带附件

引入依赖

  1. <dependency>
  2. <groupId>javax.mail</groupId>
  3. <artifactId>mail</artifactId>
  4. <version>1.4</version>
  5. </dependency>
  1. package com.shucha.deveiface.biz.test;
  2. import javax.activation.DataHandler;
  3. import javax.activation.DataSource;
  4. import javax.activation.FileDataSource;
  5. import javax.mail.*;
  6. import javax.mail.internet.*;
  7. import java.io.File;
  8. import java.io.UnsupportedEncodingException;
  9. import java.util.Date;
  10. import java.util.Properties;
  11. /**
  12. * @author tqf
  13. * @Description
  14. * @Version 1.0
  15. * @since 2022-01-20 15:19
  16. */
  17. public class EmailTest {
  18. public static void main(String[] args) throws AddressException, MessagingException, UnsupportedEncodingException {
  19. // 再创建 MimeMessageHelper 对象之前加上
  20. System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
  21. Properties properties = new Properties();
  22. properties.put("mail.transport.protocol", "smtp");// 连接协议
  23. properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
  24. properties.put("mail.smtp.port", 465);// 端口号
  25. properties.put("mail.smtp.auth", "true");
  26. // properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
  27. //properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
  28. // 得到回话对象
  29. Session session = Session.getInstance(properties);
  30. // 获取邮件对象
  31. Message message = new MimeMessage(session);
  32. // 设置发件人邮箱地址
  33. message.setFrom(new InternetAddress("123456789@qq.com", "发件人姓名", "UTF-8"));
  34. // 设置收件人邮箱地址
  35. //message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("xxx@qq.com"),new InternetAddress("xxx@qq.com"),new InternetAddress("xxx@qq.com")});
  36. /*设置收件人
  37. To收件人 CC 抄送 BCC密送*/
  38. message.setRecipient(Message.RecipientType.TO, new InternetAddress("123456@qq.com"));//一个收件人
  39. message.setRecipient(Message.RecipientType.CC, new InternetAddress("12345878@qq.com"));//一个收件人
  40. // 多个收件人
  41. /*String[] split = emails.split(";");
  42. InternetAddress[] address = new InternetAddress[split.length];
  43. for (int i = 0; i < split.length; i++) {
  44. address[i] = new InternetAddress(split[i]);
  45. }
  46. message.setRecipients(Message.RecipientType.TO, address);
  47. */
  48. // 设置邮件标题
  49. message.setSubject("测试发送邮件");
  50. // 设置邮件内容
  51. // message.setText("邮件内容邮件内容邮件内容xmqtest");
  52. // 创建消息部分
  53. BodyPart messageBodyPart = new MimeBodyPart();
  54. // 消息内容
  55. messageBodyPart.setText("邮件发送测试,带附件测试");
  56. // 创建多重消息
  57. Multipart multipart = new MimeMultipart();
  58. // 设置文本消息部分
  59. multipart.addBodyPart(messageBodyPart);
  60. // // 附件部分
  61. // messageBodyPart = new MimeBodyPart();
  62. // //把文件,添加到附件1中
  63. // //数据源
  64. // DataSource source = new FileDataSource(new File("D:\\log.xls"));
  65. // //设置第一个附件的数据
  66. // messageBodyPart.setDataHandler(new DataHandler(source));
  67. // //设置附件的文件名
  68. // messageBodyPart.setFileName("日志文件");
  69. //创建附件节点 读取本地文件,并读取附件名称
  70. MimeBodyPart file = new MimeBodyPart();
  71. DataHandler dataHandler = new DataHandler(new FileDataSource("D:\\log.xls"));
  72. file.setDataHandler(dataHandler);
  73. // file.setFileName("日志文件");
  74. file.setFileName(MimeUtility.encodeText(dataHandler.getName()));
  75. MimeBodyPart file1 = new MimeBodyPart();
  76. DataHandler dataHandler1 = new DataHandler(new FileDataSource("D:\\123.xls"));
  77. file1.setDataHandler(dataHandler1);
  78. file1.setFileName(MimeUtility.encodeText("用户信息.xls"));
  79. MimeBodyPart file2 = new MimeBodyPart();
  80. DataHandler dataHandler2 = new DataHandler(new FileDataSource("D:\\解密之后的数据.xls"));
  81. file2.setDataHandler(dataHandler2);
  82. file2.setFileName(MimeUtility.encodeText(dataHandler2.getName()));
  83. multipart.addBodyPart(file);
  84. multipart.addBodyPart(file1);
  85. multipart.addBodyPart(file2);
  86. message.setSentDate(new Date());
  87. message.setContent(multipart);
  88. // 得到邮差对象
  89. Transport transport = session.getTransport();
  90. // 连接自己的邮箱账户
  91. transport.connect("123456789@qq.com", "********");// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
  92. // 发送邮件
  93. transport.sendMessage(message, message.getAllRecipients());
  94. transport.close();
  95. }
  96. }

邮件工具类

  1. package com.shucha.smartreport.util;
  2. import javax.mail.*;
  3. import javax.mail.internet.InternetAddress;
  4. import javax.mail.internet.MimeBodyPart;
  5. import javax.mail.internet.MimeMessage;
  6. import javax.mail.internet.MimeMultipart;
  7. import java.io.UnsupportedEncodingException;
  8. import java.util.Date;
  9. import java.util.Properties;
  10. import java.util.regex.Matcher;
  11. import java.util.regex.Pattern;
  12. /**
  13. * @author tqf
  14. * @Description 邮件发送
  15. * @Version 1.0
  16. * @since 2022-05-25 10:51
  17. */
  18. public class EmailUtils {
  19. // 发件人邮箱号
  20. public static String senderAddress = "123@qq.com";
  21. // 授权码
  22. public static String authorizationCode = "*******88";
  23. // 发件人姓名
  24. public static String personalName = "智能报表";
  25. // 编码方式
  26. public static String charset = "UTF-8";
  27. // 邮箱验证规则
  28. private static String REGEX_EMAIL = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$";
  29. /**
  30. * 报告分享邮件发送
  31. * @param contentMessage 邮件内容
  32. * @param emails 收件人邮箱,多个邮箱使用分号;拼接
  33. * @throws UnsupportedEncodingException
  34. * @throws MessagingException
  35. */
  36. public static void sendEmail(String contentMessage,String emails) throws UnsupportedEncodingException, MessagingException {
  37. // 再创建 MimeMessageHelper 对象之前加上
  38. // System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
  39. Properties properties = new Properties();
  40. // 连接协议
  41. properties.put("mail.transport.protocol", "smtp");
  42. // 主机名
  43. properties.put("mail.smtp.host", "smtp.qq.com");
  44. // 端口号
  45. properties.put("mail.smtp.port", 465);
  46. properties.put("mail.smtp.auth", "true");
  47. // 设置是否使用ssl安全连接 ---一般都使用
  48. // properties.put("mail.smtp.ssl.enable", "true");
  49. // 设置是否显示debug信息 true 会在控制台显示相关信息
  50. //properties.put("mail.debug", "true");
  51. // 得到回话对象
  52. Session session = Session.getInstance(properties);
  53. // 获取邮件对象
  54. Message message = new MimeMessage(session);
  55. // MimeMessage mimeMessage =new MimeMessage(session);
  56. // 设置发件人邮箱地址
  57. message.setFrom(new InternetAddress(senderAddress, personalName, charset));
  58. // 设置收件人邮箱地址
  59. //message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("xxx@qq.com"),new InternetAddress("xxx@qq.com"),new InternetAddress("xxx@qq.com")});
  60. /*设置收件人
  61. To收件人 CC 抄送 BCC密送*/
  62. // message.setRecipient(Message.RecipientType.TO, new InternetAddress("1234@qq.com"));//一个收件人
  63. // message.setRecipient(Message.RecipientType.CC, new InternetAddress("1234@qq.com"));//一个收件人
  64. // message.setRecipient(Message.RecipientType.BCC, new InternetAddress("1234@qq.com"));//一个收件人
  65. String[] split = emails.split(";");
  66. InternetAddress[] address = new InternetAddress[split.length];
  67. for (int i = 0; i < split.length; i++) {
  68. address[i] = new InternetAddress(split[i]);
  69. }
  70. message.setRecipients(Message.RecipientType.TO, address);
  71. // message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("1234@qq.com"),new InternetAddress("1234@qq.com"),new InternetAddress("1234@qq.com")});
  72. // 设置邮件标题
  73. message.setSubject("报告分享");
  74. // 设置邮件内容
  75. // message.setText("邮件内容邮件内容邮件内容xmqtest");
  76. // 创建消息部分
  77. BodyPart messageBodyPart = new MimeBodyPart();
  78. // 发送的消息内容
  79. messageBodyPart.setText(contentMessage);
  80. // 创建多重消息
  81. Multipart multipart = new MimeMultipart();
  82. // 设置文本消息部分
  83. multipart.addBodyPart(messageBodyPart);
  84. // // 附件部分
  85. // messageBodyPart = new MimeBodyPart();
  86. // //把文件,添加到附件1中
  87. // //数据源
  88. // DataSource source = new FileDataSource(new File("D:\\log.xls"));
  89. // //设置第一个附件的数据
  90. // messageBodyPart.setDataHandler(new DataHandler(source));
  91. // //设置附件的文件名
  92. // messageBodyPart.setFileName("日志文件");
  93. //创建附件节点 读取本地文件,并读取附件名称
  94. /*MimeBodyPart file = new MimeBodyPart();
  95. DataHandler dataHandler = new DataHandler(new FileDataSource("D:\\log.xls"));
  96. file.setDataHandler(dataHandler);
  97. // file.setFileName("日志文件");
  98. file.setFileName(MimeUtility.encodeText(dataHandler.getName()));
  99. MimeBodyPart file1 = new MimeBodyPart();
  100. DataHandler dataHandler1 = new DataHandler(new FileDataSource("D:\\123.xls"));
  101. file1.setDataHandler(dataHandler1);
  102. file1.setFileName("用户信息.xls");
  103. MimeBodyPart file2 = new MimeBodyPart();
  104. DataHandler dataHandler2 = new DataHandler(new FileDataSource("D:\\解密之后的数据.xls"));
  105. file2.setDataHandler(dataHandler2);
  106. file2.setFileName(MimeUtility.encodeText(dataHandler2.getName()));
  107. multipart.addBodyPart(file);
  108. multipart.addBodyPart(file1);
  109. multipart.addBodyPart(file2);*/
  110. message.setSentDate(new Date());
  111. message.setContent(multipart);
  112. // 得到邮差对象
  113. Transport transport = session.getTransport();
  114. // 连接自己的邮箱账户
  115. // 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
  116. transport.connect(senderAddress, authorizationCode);
  117. // 发送邮件
  118. transport.sendMessage(message, message.getAllRecipients());
  119. transport.close();
  120. }
  121. /**
  122. * 校验邮箱格式
  123. * @param email
  124. * @return
  125. */
  126. public static Boolean regexEmail(String email){
  127. Boolean b;
  128. if(email.length() == 0){
  129. b = false;
  130. }else{
  131. // 编译正则表达式
  132. Pattern pattern = Pattern.compile(REGEX_EMAIL);
  133. // 忽略大小写的写法
  134. // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
  135. Matcher matcher = pattern.matcher(email);
  136. // 字符串是否与正则表达式相匹配
  137. boolean isMatch = matcher.matches();
  138. if(isMatch){
  139. b = true;
  140. } else {
  141. b = false;
  142. }
  143. }
  144. return b;
  145. }
  146. public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
  147. String url = "http://192.168.0.119:8080/reportShare?id=12469611d03a4bd79f7471264777891e";
  148. String passWord = "RF8Y";
  149. // 收件人邮箱 多个是的;拼接
  150. String emails = "123@qq.com;2365@qq.com";
  151. // 消息内容
  152. StringBuffer buffer = new StringBuffer();
  153. buffer.append("链接:"+url+" \n");
  154. buffer.append("提取码:"+passWord+" \n");
  155. sendEmail(buffer.toString(),emails);
  156. }
  157. }

 

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

闽ICP备14008679号