SmtpUtil.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package jnpf.base.util;
  2. import com.baomidou.mybatisplus.core.toolkit.Constants;
  3. import jnpf.base.model.MailAccount;
  4. import jnpf.base.model.MailFile;
  5. import jnpf.base.model.MailModel;
  6. import lombok.Cleanup;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.mail.javamail.JavaMailSenderImpl;
  9. import org.springframework.mail.javamail.MimeMessageHelper;
  10. import jakarta.mail.Session;
  11. import jakarta.mail.Transport;
  12. import jakarta.mail.internet.MimeMessage;
  13. import java.io.File;
  14. import java.util.Properties;
  15. /**
  16. *
  17. * @author JNPF开发平台组
  18. * @version V3.1.0
  19. * @copyright 引迈信息技术有限公司
  20. * @date 2021/3/12 15:31
  21. */
  22. @Slf4j
  23. public class SmtpUtil {
  24. private String host = null;
  25. private Integer port = null;
  26. private String username = null;
  27. private String password = null;
  28. private String emailform = null;
  29. private String timeout = "2500";
  30. private String personal = null;
  31. private JavaMailSenderImpl mailSender = null;
  32. /**
  33. * 邮箱验证
  34. *
  35. * @param mailAccount
  36. * @return
  37. */
  38. public static String checkConnected(MailAccount mailAccount) {
  39. try {
  40. Properties props = getProperties(mailAccount.getSsl());
  41. Session session = getSession(props);
  42. @Cleanup Transport transport = getTransport(session, mailAccount);
  43. return "true";
  44. } catch (Exception e) {
  45. log.error(e.getMessage());
  46. return e.getMessage();
  47. }
  48. }
  49. /**
  50. * 获取Session
  51. *
  52. * @param props
  53. */
  54. private static Session getSession(Properties props) {
  55. Session session = Session.getInstance(props);
  56. session.setDebug(true);
  57. return session;
  58. }
  59. /**
  60. * 获取Properties
  61. *
  62. * @param ssl
  63. */
  64. private static Properties getProperties(boolean ssl) {
  65. Properties props = new Properties();
  66. props.setProperty("mail.transport.protocol", "smtp");
  67. props.setProperty("mail.smtp.auth", "true");
  68. props.setProperty("mail.smtp.timeout", "2500");
  69. // 设置接收超时时间
  70. props.put("mail.smtp.connectiontimeout", "5000");
  71. // 设置写入超时时间
  72. props.put("mail.smtp.writetimeout", "25000");
  73. if (ssl) {
  74. props.put("mail.smtp.ssl.enable", "true");
  75. props.put("mail.smtp.socketFactory.fallback", "false");
  76. props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  77. }
  78. return props;
  79. }
  80. /**
  81. * 获取Transport
  82. */
  83. private static Transport getTransport(Session session, MailAccount mailAccount) throws Exception {
  84. Transport transport = session.getTransport();
  85. transport.connect(mailAccount.getSmtpHost(), mailAccount.getSmtpPort(), mailAccount.getAccount(), mailAccount.getPassword());
  86. return transport;
  87. }
  88. /**
  89. * springboot发送邮件
  90. * @param mailAccount
  91. */
  92. public SmtpUtil(MailAccount mailAccount) {
  93. host = mailAccount.getSmtpHost();
  94. port = mailAccount.getSmtpPort();
  95. username = mailAccount.getAccount();
  96. password = mailAccount.getPassword();
  97. emailform = mailAccount.getAccount();
  98. personal = mailAccount.getAccountName();
  99. mailSender = createMailSender();
  100. }
  101. /**
  102. * 邮件发送器
  103. *
  104. * @return 配置好的工具
  105. */
  106. private JavaMailSenderImpl createMailSender() {
  107. JavaMailSenderImpl sender = new JavaMailSenderImpl();
  108. sender.setHost(host);
  109. sender.setPort(port);
  110. sender.setUsername(username);
  111. sender.setPassword(password);
  112. sender.setDefaultEncoding(Constants.UTF_8);
  113. Properties props = new Properties();
  114. props.setProperty("mail.smtp.auth", "true");
  115. props.setProperty("mail.smtp.timeout", timeout);
  116. // 设置接收超时时间
  117. props.put("mail.smtp.connectiontimeout", "5000");
  118. // 设置写入超时时间
  119. props.put("mail.smtp.writetimeout", "25000");
  120. props.setProperty("mail.smtp.starttls.enable", "true");
  121. props.setProperty("mail.smtp.starttls.required", "true");
  122. props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  123. sender.setJavaMailProperties(props);
  124. return sender;
  125. }
  126. /**
  127. * 发送邮件
  128. *
  129. * @param mailModel 邮件实体
  130. * @throws Exception 异常
  131. */
  132. public void sendMail(String type, String path, MailModel mailModel) throws Exception {
  133. MimeMessage mimeMessage = mailSender.createMimeMessage();
  134. MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, Constants.UTF_8);
  135. messageHelper.setFrom(emailform,mailModel.getFromName());
  136. messageHelper.setTo(mailModel.getRecipient());
  137. if (mailModel.getBcc() != null) {
  138. messageHelper.setBcc(mailModel.getBcc());
  139. }
  140. if (mailModel.getCc() != null) {
  141. messageHelper.setCc(mailModel.getCc());
  142. }
  143. messageHelper.setSubject(mailModel.getSubject());
  144. messageHelper.setText(mailModel.getBodyText(), true);
  145. if (mailModel.getAttachment().size() > 0) {
  146. for (MailFile mailFile : mailModel.getAttachment()) {
  147. // UploadUtil.downToLocal(type, mailFile.getFileId(), FileTypeEnum.MAIL, path);
  148. File file = new File(path + mailFile.getFileId());
  149. String fileName = mailFile.getFileId();
  150. messageHelper.addAttachment(fileName, file);
  151. }
  152. }
  153. mailSender.send(mimeMessage);
  154. }
  155. }