智能仲裁后端服务

EmailOutUtil.java 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package com.ruoyi.common.utils;
  2. import lombok.Data;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.mail.SimpleMailMessage;
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. import org.springframework.mail.javamail.JavaMailSenderImpl;
  8. import org.springframework.mail.javamail.MimeMessageHelper;
  9. import org.springframework.stereotype.Component;
  10. import javax.activation.DataHandler;
  11. import javax.mail.*;
  12. import javax.mail.internet.*;
  13. import javax.mail.util.ByteArrayDataSource;
  14. import javax.validation.constraints.NotNull;
  15. import java.io.File;
  16. import java.io.IOException;
  17. import java.nio.file.Files;
  18. import java.nio.file.Paths;
  19. import java.security.Security;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.Properties;
  23. import java.util.regex.Matcher;
  24. import java.util.regex.Pattern;
  25. /**
  26. * @ClassName EmailInUtil
  27. * @Description 邮件发送工具
  28. */
  29. @Component
  30. @Data
  31. @Slf4j
  32. public class EmailOutUtil {
  33. private static Pattern emailPattern = Pattern.compile("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");
  34. // private static Pattern phonePattern = Pattern.compile("0?(13|14|15|18)[0-9]{9}");
  35. private static Pattern phonePattern = Pattern.compile("^1\\d{10}$");
  36. // @Autowired
  37. // private JavaMailSender mailSender;
  38. // 发送发邮箱地址(外网地址)
  39. // @Value("${spring.mail-out-network.from}")
  40. // private static String fromOut;
  41. @Value("${spring.mail.host}")
  42. private String hostOut;
  43. @Value("${spring.mail.username}")
  44. private String usernameOut;
  45. @Value("${spring.mail.password}")
  46. private String passwordOut;
  47. @Value("${spring.mail.port}")
  48. private Integer portOut;
  49. public JavaMailSender rebuildMailSender() {
  50. JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
  51. mailSender.setHost(hostOut);
  52. mailSender.setUsername(usernameOut);
  53. mailSender.setPassword(passwordOut);
  54. mailSender.setPort(portOut);
  55. mailSender.setProtocol("smtp");
  56. mailSender.setDefaultEncoding("UTF-8");
  57. return mailSender;
  58. }
  59. /**
  60. * 发送纯文本邮件信息
  61. *
  62. * @param to 接收方
  63. * @param subject 邮件主题
  64. * @param content 邮件内容(发送内容)
  65. */
  66. public void sendMessage(String to, String subject, String content, String from, JavaMailSender mailSender) {
  67. // 创建一个邮件对象
  68. SimpleMailMessage msg = new SimpleMailMessage();
  69. msg.setFrom(from);
  70. msg.setTo(to);
  71. // 设置邮件主题
  72. msg.setSubject(subject);
  73. // 设置邮件内容
  74. msg.setText(content);
  75. // 发送邮件
  76. mailSender.send(msg);
  77. ////System.out.println("发送成功:" + from + ":to:" + to);
  78. }
  79. /**
  80. * @param to 收件人
  81. * @param message 邮件内容
  82. * @param subject 邮件主题
  83. * @param fileList 邮件附件
  84. */
  85. public void sendEmil(String to, String message, String subject, List<File> fileList, File file) {
  86. try {
  87. String messageContent = "<html><body><p style=\"font-family: Arial, sans-serif; font-size: 18px;\">"+message+"。</p></body></html>";
  88. MimeBodyPart messageBodyPart = new MimeBodyPart();
  89. messageBodyPart.setContent(messageContent, "text/html;charset=utf-8");
  90. Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  91. final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
  92. //设置邮件会话参数
  93. Properties props = new Properties();
  94. //邮箱的发送服务器地址
  95. props.setProperty("mail.smtp.host", "smtp.163.com");
  96. props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
  97. props.setProperty("mail.smtp.socketFactory.fallback", "false");
  98. //邮箱发送服务器端口,这里设置为465端口
  99. props.setProperty("mail.smtp.port", "465");
  100. props.setProperty("mail.smtp.socketFactory.port", "465");
  101. props.put("mail.smtp.auth", "true");
  102. //获取到邮箱会话,利用匿名内部类的方式,将发送者邮箱用户名和密码授权给jvm
  103. Session session = Session.getDefaultInstance(props, new Authenticator() {
  104. @Override
  105. protected PasswordAuthentication getPasswordAuthentication() {
  106. return new PasswordAuthentication(usernameOut, passwordOut);
  107. }
  108. });
  109. //通过会话,得到一个邮件,用于发送
  110. Message msg = new MimeMessage(session);
  111. //设置发件人
  112. msg.setFrom(new InternetAddress(usernameOut));
  113. //设置收件人,to为收件人,cc为抄送,bcc为密送
  114. msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
  115. msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(to, false));
  116. msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to, false));
  117. //设置邮件消息
  118. msg.setSubject(subject);
  119. msg.setText(message);
  120. msg.setDescription("messageutf-8html");
  121. //设置发送的日期
  122. msg.setSentDate(new Date());
  123. // 创建邮件正文
  124. MimeMultipart multipart = new MimeMultipart();
  125. // MimeBodyPart bodyPart = new MimeBodyPart();
  126. // bodyPart.setContent("This is the body of the email", "text/html");
  127. multipart.addBodyPart(messageBodyPart);
  128. // 添加附件
  129. if (file != null) {
  130. MimeBodyPart attachmentPart = new MimeBodyPart();
  131. attachmentPart.attachFile(file);
  132. attachmentPart.setFileName(MimeUtility.encodeText(file.getName()));
  133. multipart.addBodyPart(attachmentPart);
  134. //将multipart对象放入邮件
  135. msg.setContent(multipart);
  136. } else if (fileList != null && fileList.size() > 0) {
  137. // 添加附件(多个)
  138. if (fileList != null && fileList.size() > 0) {
  139. for (File tempfile : fileList) {
  140. MimeBodyPart attachmentPart = new MimeBodyPart();
  141. attachmentPart.attachFile(tempfile);
  142. attachmentPart.setFileName(MimeUtility.encodeText(tempfile.getName()));
  143. multipart.addBodyPart(attachmentPart);
  144. }
  145. msg.setContent(multipart);
  146. }
  147. }
  148. //调用Transport的send方法去发送邮件
  149. Transport.send(msg);
  150. } catch (Exception e) {
  151. e.printStackTrace();
  152. }
  153. }
  154. /**
  155. * 发送带附件的邮件信息
  156. *
  157. * @param to 接收方
  158. * @param subject 邮件主题
  159. * @param content 邮件内容(发送内容)
  160. * @param fileList 文件集合 // 可发送多个附件
  161. */
  162. public void sendMessageCarryFiles(String to, String subject, String content, List<File> fileList, String from, @NotNull JavaMailSender mailSender) {
  163. MimeMessage mimeMessage = mailSender.createMimeMessage();
  164. try {
  165. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  166. helper.setFrom(from);
  167. helper.setTo(to);
  168. // 设置邮件主题
  169. helper.setSubject(subject);
  170. // 设置邮件内容
  171. helper.setText(content);
  172. // 添加附件(多个)
  173. if (fileList != null && fileList.size() > 0) {
  174. for (File file : fileList) {
  175. helper.addAttachment(file.getName(), file);
  176. }
  177. }
  178. } catch (MessagingException e) {
  179. e.printStackTrace();
  180. }
  181. // 发送邮件
  182. mailSender.send(mimeMessage);
  183. }
  184. /**
  185. * 发送带附件的邮件信息
  186. *
  187. * @param to 接收方
  188. * @param subject 邮件主题
  189. * @param content 邮件内容(发送内容)
  190. * @param file 单个文件
  191. */
  192. public void sendMessageCarryFile(String to, String subject, String content, File file, String from, JavaMailSender mailSender) {
  193. MimeMessage mimeMessage = mailSender.createMimeMessage();
  194. try {
  195. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  196. helper.setFrom(from);
  197. helper.setTo(to);
  198. // 设置邮件主题
  199. helper.setSubject(subject);
  200. // 设置邮件内容
  201. helper.setText(content);
  202. // 单个附件
  203. helper.addAttachment(file.getName(), file);
  204. } catch (MessagingException e) {
  205. e.printStackTrace();
  206. }
  207. // 发送邮件
  208. mailSender.send(mimeMessage);
  209. }
  210. /**
  211. * 初始化内外网邮件发送对象
  212. *
  213. * @param num
  214. */
  215. // public static JavaMailSender initJavaMailSender(Integer num) {
  216. // if (num != null && num == 1) {
  217. // //内网
  218. // return rebuildMailSender(hostIn, usernameIn, passwordIn, Integer.parseInt(portIn), "smtps");
  219. // } else {
  220. // //外网
  221. // return rebuildMailSender(hostOut, usernameOut, passwordOut, Integer.parseInt(portOut), "smtps");
  222. // }
  223. // }
  224. // public static String getInnerFrom() {
  225. // return EmailInUtil;
  226. // }
  227. //
  228. // public static String getOutterFrom() {
  229. // return fromOut;
  230. // }
  231. /**
  232. * 验证邮箱格式
  233. *
  234. * @param str
  235. * @return
  236. */
  237. public static boolean isEmail(String str) {
  238. boolean flag = false;
  239. Matcher matcher = emailPattern.matcher(str);
  240. if (matcher.matches()) {
  241. flag = true;
  242. }
  243. return flag;
  244. }
  245. public static boolean isPhoneNumber(String str) {
  246. boolean flag = false;
  247. Matcher matcher = phonePattern.matcher(str);
  248. if (matcher.matches()) {
  249. flag = true;
  250. }
  251. return flag;
  252. }
  253. }