最近在學習網上商城時,接觸到了一個郵件發送的功能。之前一直在使用郵箱進行發送郵件,但是其中的具體如何運轉的卻不知道是怎麼回事。那麼郵件發送究竟是怎麼一回事呢?
郵件發送過程:
流程說明:首先是發送人將郵件通過用戶端軟體發送到特定的伺服器上,然後通過電子郵件簡單傳輸協議(SMTP)來進行傳輸,收件者通過POP3協議將郵件從伺服器上接受回來。這樣就實現了郵件之間的相互傳送。
實現過程:
在有網路的情況下,我們可以直接使用搜狐、網易等郵箱進行發送。那麼如何在沒有網路的情況下,實現內部之間的發送呢?
首先需要安裝配置一個伺服器,視頻中使用的是易郵郵件伺服器,該軟體的安裝比較簡單,安裝成功之後會有一個失敗提示,如下:
該問題沒有影響(暫時還沒有遇到什麼問題)我們的功能,可以忽略。安裝完成之後需要對其進行一些配置。先進行伺服器設定,開啟工具——>伺服器設定:設定自己伺服器位址的網域名稱(類似於我們使用的網易郵箱的網域名稱@後的163.com)
然後添加新帳號:設定名稱和密碼
添加之後的效果如下:
伺服器配置完成之後,進行用戶端的安裝與配置,因為本機已經安裝了foxmail的最新版本,為了不造成混亂,所以用foxmail6.5進行設定,其中安裝過程不再敘述。
首先要新添加使用者賬戶(如果在安裝過程中已經設定了測試的使用者就不用再添加),填入測試的賬戶,如下:
點擊下一步,設定服務類型和伺服器,這裡需要注意伺服器的配置,由於自己是在本地進行郵件傳送,所以發、送郵件伺服器都設定為本地:localhost。
設定好之後,下一步,進行測試:
成功之後即可關閉配置,此時配置基本上就完成了
在此次配置過程中需要注意:
1、設定管理員的網域名稱,並且添加一些賬戶
2、配置用戶端時,注意接收伺服器位址的設定、伺服器類型等問題。
至此,我們發送郵件所需要的環境已經配置完成,具體的代碼實現過程,將在下篇進行詳細介紹。通過這次的學習,瞭解了郵件服務的基本原理,知道了我們平常發送郵件的過程。同時,也讓自己對一些伺服器設定、網域名稱及類型有了新的認識,之前也曾遇到過foxmail無法工作的問題,現在基本上知道其問題處在何處了。知識,總是在不斷的實踐中獲得的,而且是需要不斷的反覆學習和鍛煉。
以上基本上將發送的原理說了一下,以及如何進行配置郵件服務。下面主要說一下發送郵件的一些具體的實現過程。
代碼實現發送過程主要分為三個步驟:
第一步是獲得串連,通過java中的Properties類來進行讀取設定檔,調用基類的一些方法進行基礎的設定以及串連設定。
// 1、獲得串連 Properties props=new Properties();//Properties是java中的一個重要的類,主要用於讀取java的設定檔 //設定已連線的服務器 props.setProperty("mail.host", "localhost");//調用Hashtable的方法put,通過調用基類的put方法來設定索引值對 Session session=Session.getInstance(props, new Authenticator(){ @Override protected PasswordAuthentication getPasswordAuthentication() { // TODO Auto-generated method stub //設定自己的服務郵件地址和密碼 return new PasswordAuthentication("service@pengbo.com","1"); } });
第二步是進行建立郵件對象,主要是通過Message這個載體進行封裝資訊,Message是一個抽象類別,已知的實作類別有MimeMessage。
// 2、建立郵件對象 Message message=new MimeMessage(session); // 設定發送人 try { //設定服務端 message.setFrom(new InternetAddress("service@pengbo.com")); // 設定收件者 message.addRecipient(RecipientType.TO, new InternetAddress(to)); // 設定標題 message.setSubject("購物啟用郵件"); // 設定郵件內文 message.setContent("<h1>購物啟用郵件,點下面連結完成啟用操作!</h1><h3><a href='http://192.168.21.84:8080/shop/user_active.action?code="+code+" '>http://192.168.21.84:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");
第三步是發送郵件
// 3、發送郵件 Transport.send(message); 這樣發送郵件的主要流程就實現了,然後在此類中定義主方法: public static void main(String[] args){ //要發送的對象及驗證碼 sendMail("a@pengbo.com","11111111"); } 在Service層進行調用郵件發送的方法即可: // 發送啟用郵件 MailUitls.sendMail(user.getEmail(), code);
具體的知識積累:
1、Properties 主要擷取設定檔資訊,主要的方法有getProperty ( String key)、load ( InputStream inStream)、setProperty ( String key, String value)、store ( OutputStream out, String comments)、clear ()
2、Session 是一對配置資訊的集合,主要作用是接收各種配置屬性資訊,初始化JavaMail環境
3、Message 是一個抽象類別,它實現介面Part,並定義了一些屬性
4、transport是指傳輸郵件,與之對應的是store儲存功能。
功能雖然實現了,但是其中用到的一些類還需要進行深入的學習和研究。就目前而言,僅僅有了一個入門,知道了在JavaMail中,有Properties、Session、Message這幾個重要的類。
以上就是本文的全部內容,希望對大家的學習有所協助。