Java Mail 實現第三方郵件發送功能

來源:互聯網
上載者:User

標籤:import   郵件   擷取   規範   oid   style   out   service   用戶端設定   

 

  1 建立一個用於發送郵件的類

  1 package com.latiny.service;  2   3 import java.io.IOException;  4 import java.io.InputStream;  5 import java.util.Date;  6 import java.util.Properties;  7 import javax.mail.Session;  8 import javax.mail.Transport;  9 import javax.mail.internet.InternetAddress; 10 import javax.mail.internet.MimeMessage; 11  12 public class SendMail { 13      14      /* 15       1 寄件者的 郵箱 和 密碼 16       2 某些郵箱伺服器為了增加郵箱本身密碼的安全性,給 SMTP 用戶端設定了獨立密碼(有的郵箱稱為"授權碼"),  17       3 對於開啟了獨立密碼的郵箱, 這裡的郵箱密碼必需使用這個獨立密碼(授權碼)。 18      */ 19     private String sendEmail; 20     private String password; 21     22     //寄件者郵箱的 SMTP伺服器位址, 必須準確, 不同郵件伺服器地址不同, 一般(只是一般, 絕非絕對)格式為: smtp.xxx.com 23     private String host; 24      25     //收件者郵箱 26     private String receiveEmail; 27      28     // 發送主題,發送內容 29     private String subject; 30     private String content; 31      32     //讀取設定檔 33     private Properties pp; 34     InputStream inStream; 35      36     //從系統的設定檔取值給成員變數賦值 37     private void initVariable() 38     { 39         pp = new Properties(); 40         inStream = SendMail.class.getClassLoader().getResourceAsStream("com/latiny/service/emailConfig.properties"); 41         try  42         { 43             pp.load(inStream); 44             sendEmail = pp.getProperty("sendEmail"); 45             password = pp.getProperty("password"); 46             host = pp.getProperty("host"); 47              48         } catch (IOException e) { 49             // TODO Auto-generated catch block 50             e.printStackTrace(); 51         } 52     } 53      54     public SendMail(String receiveEmail, String subject, String content) 55     { 56         this.subject = subject; 57         this.receiveEmail = receiveEmail; 58         this.content = content; 59         initVariable(); 60         sendOut(); 61     } 62      63     private MimeMessage createMessage(Session session, String subject, String content) throws Exception 64     { 65         // 建立郵件對象 66         MimeMessage message = new MimeMessage(session); 67          68         // 設定寄件者 69         message.setFrom(new InternetAddress(sendEmail, "訂單成功", "UTF-8")); 70          71         // 收件者(可以增加多個收件者、抄送、密送) 72         message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveEmail, "Latiny 使用者", "UTF-8")); 73          74         // 郵件主題 75         message.setSubject(subject, "UTF-8"); 76          77         // Content: 郵件內文(可以使用html標籤) 78         message.setContent(content, "text/html;charset=UTF-8"); 79          80         // 置發件時間 81         message.setSentDate(new Date()); 82  83         // 儲存設定 84         message.saveChanges(); 85          86         return message; 87     } 88  89     private void sendOut() 90     { 91          92         try  93         { 94             // 建立參數配置, 用於串連郵件伺服器的參數配置 95             Properties props = new Properties();                    // 參數配置 96             props.setProperty("mail.transport.protocol", "smtp");   // 使用的協議(JavaMail規範要求) 97             props.setProperty("mail.smtp.host", host);               // 寄件者的郵箱的 SMTP 伺服器位址 98             props.setProperty("mail.smtp.auth", "true");            // 需要請求認證 99             100             // PS: 某些郵箱伺服器要求 SMTP 串連需要使用 SSL 安全認證 (為了提高安全性, 郵箱支援SSL串連, 也可以自己開啟),101             // 如果無法串連郵件伺服器, 仔細查看控制台列印的 log, 如果有有類似 “串連失敗, 要求 SSL 安全連線” 等錯誤,102             // 開啟下面 /* ... */ 之間的注釋代碼, 開啟 SSL 安全連線。103             // SMTP 伺服器的連接埠 (非 SSL 串連的連接埠一般預設為 25, 可以不添加, 如果開啟了 SSL 串連,需要改為對應郵箱的 SMTP 伺服器的連接埠, 具體可查看對應郵箱服務的協助,104             // QQ郵箱的SMTP(SLL)連接埠為465或587, 其他郵箱自行去查看)105             106             /* 107             final String smtpPort = "465";108             props.setProperty("mail.smtp.port", smtpPort);109             props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");110             props.setProperty("mail.smtp.socketFactory.fallback", "false");111             props.setProperty("mail.smtp.socketFactory.port", smtpPort);112             */113             114             //根據配置建立會話對象,用於和郵件伺服器通訊115             Session session = Session.getInstance(props);116             session.setDebug(true);117             MimeMessage message = this.createMessage(session, this.subject, this.content);118             119              // 根據 Session 擷取郵件傳輸對象120             Transport transport = session.getTransport();121             122             // 使用 郵箱帳號 和 密碼 串連郵件伺服器, 這裡認證的郵箱必須與 message 中的寄件者郵箱一致, 否則報錯123             // 124             //    PS_01: 成敗的判斷關鍵在此一句, 如果串連伺服器失敗, 都會在控制台輸出相應失敗原因的 log,125             //           仔細查看失敗原因, 有些郵箱伺服器會返回錯誤碼或查看錯誤類型的連結, 根據給出的錯誤126             //           類型到對應郵件伺服器的協助網站上查看具體失敗原因。127             //128             //    PS_02: 串連失敗的原因通常為以下幾點, 仔細檢查代碼:129             //           (1) 郵箱沒有開啟 SMTP 服務;130             //           (2) 郵箱密碼錯誤, 例如某些郵箱開啟了獨立密碼;131             //           (3) 郵箱伺服器要求必須要使用 SSL 安全連線;132             //           (4) 請求過於頻繁或其他原因, 被郵件伺服器拒絕服務;133             //           (5) 如果以上幾點都確定無誤, 到郵件伺服器網站尋找協助。134             //135             //    PS_03: 仔細看log, 認真看log, 看懂log, 錯誤原因都在log已說明。136             transport.connect(sendEmail,password);137             138             // 發送郵件, 發到所有的收件地址, message.getAllRecipients() 擷取到的是在建立郵件對象時添加的所有收件者, 抄送人, 密送人139             transport.sendMessage(message, message.getAllRecipients());140             141             // 關閉串連142             transport.close();143             144         } catch (Exception e) {145             // TODO Auto-generated catch block146             e.printStackTrace();147         }148     }149     150 }

 

  設定檔 emailConfig.properties:

sendEmail = [email protected].compassword = email密碼,非登入密碼,而是專門提供的授權碼host =smtp.163.com

 

  

Java Mail 實現第三方郵件發送功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.