Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1. package com.digiwin.utils;
  2.  
  3. import java.util.Date;
  4.  
  5. import javax.mail.Message;
  6. import javax.mail.MessagingException;
  7. import javax.mail.Multipart;
  8. import javax.mail.Transport;
  9. import javax.mail.internet.AddressException;
  10. import javax.mail.internet.InternetAddress;
  11. import javax.mail.internet.MimeBodyPart;
  12. import javax.mail.internet.MimeMessage;
  13. import javax.mail.internet.MimeMultipart;
  14.  
  15. public class DWMailUtils {
  16.  
  17. private static final String MAIL_MIME_CHARSET = "utf8";
  18. private static final String CONTENT_CHARSET = "text/html; charset=utf8";
  19.  
  20. /**
  21. * 同步寄信功能
  22. *
  23. * @param sender-寄件者
  24. * @param receiver-收件者
  25. * @param ccList-CC
  26. * @param smtpHost-伺服器位置
  27. * @param port-port
  28. * @param username-使用者名稱(登入郵件伺服器)
  29. * @param passwd-密碼(登入郵件伺服器)
  30. * @param subject-標題
  31. * @param content-內容
  32. * @param typeOfConnection-連線種類0:TLS,1:SSL
  33. * @return
  34. * @throws Exception
  35. */
  36. public static boolean doSendMail(String sender, String receiver, String ccList, String bccList, String smtpHost, int port, String username, String passwd, String subject, String content, Integer typeOfConnection) throws Exception {
  37.  
  38. Transport transport = null;
  39. sender = username;// 因為通常寄件者與登入郵件系統帳密是同一組,先固定住以避免額外錯誤,有應用需求再修改掉,sender 的入參是保留此彈性
  40.  
  41. try {
  42. // encoding
  43. System.setProperty("mail.mime.charset", MAIL_MIME_CHARSET);
  44. // properties
  45. java.util.Properties props = setProperties(typeOfConnection, smtpHost, port);
  46. // construct a mail session
  47. javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props, null);
  48. mailSession.setDebug(false);
  49.  
  50. // Message msg = new MimeMessage(mailSession);
  51. Message msg = setMsgInfo(mailSession, sender, receiver, ccList, bccList, subject, content);
  52.  
  53. if (typeOfConnection == 0) {
  54. transport = mailSession.getTransport("smtp"); //回傳假的instance
  55. } else {
  56. transport = mailSession.getTransport("smtps");
  57. }
  58. transport.connect(smtpHost, username, passwd);
  59. transport.sendMessage(msg, msg.getAllRecipients());
  60.  
  61. return true;
  62. } catch (Exception e) { ///Exception 要測到
  63. e.printStackTrace();
  64. return false;
  65. } finally {
  66. closeTransport(transport);
  67. }
  68. }
  69.  
  70. private static void closeTransport(Transport transport) throws MessagingException {
  71. if (transport != null) {
  72. transport.close();
  73. }
  74. }
  75.  
  76. private static Message setMsgInfo(javax.mail.Session mailSession, String sender, String receiver, String ccList, String bccList, String subject, String content) throws AddressException, MessagingException {
  77.  
  78. Message msg = new MimeMessage(mailSession);
  79. // mail sender
  80. msg.setFrom(new InternetAddress(sender));
  81. // mail recievers
  82. InternetAddress[] address = InternetAddress.parse(receiver, false);
  83. msg.setRecipients(Message.RecipientType.TO, address);
  84. // mail cc
  85. if (ccList != null && !ccList.equals("")) {
  86. msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccList));
  87. }
  88. // bcc測試中
  89. if (bccList != null && !bccList.equals("")) {
  90. msg.addRecipients(Message.RecipientType.BCC, InternetAddress.parse(bccList));
  91. }
  92. // mail's subject
  93. msg.setSubject(subject);
  94. // mail's sending time
  95. msg.setSentDate(new Date());
  96. MimeBodyPart mbp = new MimeBodyPart();
  97. // mail's charset
  98. mbp.setContent(content, CONTENT_CHARSET);
  99. Multipart mp = new MimeMultipart();
  100. mp.addBodyPart(mbp);
  101. msg.setContent(mp);
  102. return msg;
  103. }
  104.  
  105. private static java.util.Properties setProperties(int typeOfConnection, String smtpHost, int port) {
  106. java.util.Properties props = null;
  107. switch (typeOfConnection) {
  108. case 1: // TLS
  109. props = getPropertyInTls(smtpHost, port);
  110. break;
  111. case 2: // SSL
  112. props = getPropertyInSsl(smtpHost, port);
  113. break;
  114. default:
  115. props = getPropertyInNormalConnection(smtpHost, port);
  116. break;
  117. }
  118. return props;
  119. }
  120.  
  121. private static java.util.Properties getPropertyInNormalConnection(String smtpHost, int port) {
  122. java.util.Properties props = new java.util.Properties();
  123. props.put("mail.host", smtpHost);
  124. props.put("mail.transport.protocol", "smtp");
  125. props.put("mail.smtp.port", port);
  126. props.put("mail.smtp.auth", "true");
  127. return props;
  128. }
  129.  
  130. private static java.util.Properties getPropertyInTls(String smtpHost, int port) {
  131. java.util.Properties props = new java.util.Properties();
  132. props.put("mail.host", smtpHost);
  133. props.put("mail.smtp.auth", "true");
  134. props.put("mail.smtp.starttls.enable", "true");
  135. props.put("mail.smtp.port", port);
  136. return props;
  137. }
  138.  
  139. private static java.util.Properties getPropertyInSsl(String smtpHost, int port) {
  140. java.util.Properties props = new java.util.Properties();
  141. props.put("mail.host", smtpHost);
  142. props.put("mail.smtps.auth", "true");
  143. props.put("mail.smtps.port", port);
  144. props.put("mail.smtps.socketFactory.port", port);
  145. props.put("mail.smtps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  146. props.put("mail.smtps.socketFactory.fallback", "true");
  147. props.put("mail.smtps.ssl.enable", "true");
  148. return props;
  149. }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement