激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - 使用JavaMail發送郵件保證成功的方法

使用JavaMail發送郵件保證成功的方法

2020-07-07 12:43daisy JAVA教程

JavaMail是利用現有的郵件賬戶發送郵件的工具,使用過JavaMail的api發送郵件的人可能會有這樣一個疑惑:我如何知道我調用該api發送的郵件是否成功呢?那么通過下面這篇文章大家一起來看看使用JavaMail保證郵件發送成功的方法,有

前言

相信大家應該都知道,一般的開放的api給我們調用都會有個返回值或者狀態碼,來告訴我們執行成功與否。但是JavaMail卻沒有提供這樣一個返回值。

所以在調用JavaMail發送郵件的時候,我們只能通過catch異常的方式來判斷郵件是否發送成功。我們認為只要沒有異常發生,那么郵件就能發送成功。那么我們就來分析一下JavaMail為什么沒有提供返回值,和通過異常判斷郵件發送成功狀態是否靠譜。

JavaMail發送郵件原理

在使用JavaMail進行發送郵件時,我們必須提供一個郵件會話。創建郵件會話的過程如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Properties props = new Properties();
  // 發送郵件的服務器的IP和端口
  props.put("mail.smtp.host", MAIL_SMTP_HOST);
  props.put("mail.smtp.port", MAIL_SMTP_PORT);
  // 是否需要身份驗證
  props.put("mail.smtp.auth", "true");
 
  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  Session session = Session.getDefaultInstance(props, new Authenticator() {
   protected PasswordAuthentication getPasswordAuthentication() {
   // 登陸郵件發送服務器的用戶名和密碼
    return new PasswordAuthentication(MAIL_SENDER_MAIL, MAIL_SENDER_PASS);
   }
  });

分析一下代碼。

在創建Session之前我們先創建一個Properties,這個Properties設置了這樣幾個參數:mail.smtp.hostmail.smtp.portmail.smtp.authmail.smtp.socketFactory.class。在創建Session的時候還要傳入發送郵件使用的用戶名及密碼。

發送郵件代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//使用JavaMail發送郵件的5個步驟
  //1、創建session
   Session session = Session.getInstance(prop);
   //開啟Session的debug模式,這樣就可以查看到程序發送Email的運行狀態
   session.setDebug(true);
   //2、通過session得到transport對象
   Transport ts = session.getTransport();
   //3、使用郵箱的用戶名和密碼連上郵件服務器,發送郵件時,發件人需要提交郵箱的用戶名和密碼給smtp服務器,用戶名和密碼都通過驗證之后才能夠正常發送郵件給收件人。
   ts.connect("smtp.sohu.com", "gacl", "郵箱密碼");
   //4、創建郵件
   Message message = createSimpleMail(session);
   //5、發送郵件
   ts.sendMessage(message, message.getAllRecipients());
   //關閉連接
   ts.close();

總結發送郵件過程主要有以下幾個步驟:

     1.創建包含郵件服務器的網絡鏈接的Session對象

     2.創建代表郵件內容的Message對象

     3.創建Transport對象

     4.鏈接服務器

     5.發送Message

     6.關閉鏈接

由于Transport只是一個抽象類,所以這里在發送Message的時候用調用的方法ts.sendMessage實際上是調用的Transport的實現類SMTPTransportsendMessage方法。

SMTPTransportsendMessage方法則依賴SMTP協議進行郵件的發送。

所以,當javamail使用smtp服務發送郵件時,當你把郵件發送到smtp服務器的時候,你只能得到已經發送到smtp的隊列中的狀態,但是郵件服務器是否能發送成功,你是得不到的。就是說,你不能保證郵件發送一定成功。 這就取決于SMTP協議的內容傳輸了。

但是SMTP協議如果傳輸失敗,是會報錯的。SMTP由TCP提供的可靠的數據傳輸服務把郵件消息從發信人的郵件服務器傳送到收信人的郵件服務器。

所以我們可以認為當我們調用JavaMail發送郵件時,如果程序沒有報錯則表示郵件發送成功。

SMTP工作機制

SMTP通常有兩種工作模式:發送SMTP和接收SMTP。

具體工作方式為:發送SMTP在接到用戶的郵件請求后,判斷此郵件是否為本地郵件,若是直接投送到用戶的郵箱,否則向dns查詢遠端郵件服務器的MX紀錄,并建立與遠端接收SMTP之間的一個雙向傳送通道,此后SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方面傳送。一旦傳送通道建立,SMTP發送者發送MAIL命令指明郵件發送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCPT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方將如此重復多次。當接收者收到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答即可。

SMTP工作過程

簡單郵件傳輸協議(SMTP)是一種基于文本的電子郵件傳輸協議,是在因特網中用于在郵件服務器之間交換郵件的協議。SMTP是應用層的服務,可以適應于各種網絡系統。

SMTP的命令和響應都是基于文本,以命令行為單位,換行符為CR/LF。響應信息一般只有一行,由一個3位數的代碼開始,后面可附上很簡短的文字說明。

SMTP要經過建立連接、傳送郵件和釋放連接3個階段。具體為:

     (1)建立TCP連接。

     (2)客戶端向服務器發送HELO命令以標識發件人自己的身份,然后客戶端發送MAIL命令。

     (3)服務器端以OK作為響應,表示準備接收。

     (4)客戶端發送RCPT命令。

     (5)服務器端表示是否愿意為收件人接收郵件。

     (6)協商結束,發送郵件,用命令DATA發送輸入內容。

     (7)結束此次發送,用QUIT命令退出。

SMTP服務器基于DNS中的郵件交換(MX)記錄路由電子郵件。電子郵件系統發郵件時是根據收信人的地址后綴來定位郵件服務器的。SMTP通過用戶代理程序(UA)完成郵件的編輯、收取和閱讀等功能;通過郵件傳輸代理程序(MTA)將郵件傳送到目的地。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久影院在线观看 | 国产乱色精品成人免费视频 | 国产午夜精品一区二区三区不卡 | 精品国产专区 | www.成人在线视频 | 在线观看免费视频麻豆 | 中文字幕伦乱 | 欧美大电影免费观看 | 国产精品18久久久久久久 | 欧美三级欧美成人高清www | 国产三级精品最新在线 | 国产chinesehd精品91 | 国产免费资源 | 欧美日韩亚洲成人 | 日本羞羞的午夜电视剧 | 久久久久国产一区二区三区不卡 | 九九热在线视频观看 | 欧美精品一区二区三区四区 | 欧美a黄| 国产精品www | av免费大全 | 亚洲人成电影在线 | 偷偷草网站 | 看全色黄大色黄大片女图片 | 久久青草影院 | 噜噜噜影院 | 久久国产精品久久久久久电车 | 337p日本欧洲亚洲大胆精蜜臀 | 国产激情精品一区二区三区 | 92看片淫黄大片欧美看国产片 | 精品国产91久久久久久浪潮蜜月 | 欧美一级做一级爱a做片性 久久久资源网 | 综合精品一区 | 热99在线视频 | 欧美日韩国产一区二区三区在线观看 | 国产色视频在线观看免费 | 黄色av网| 中文在线观看免费视频 | 成人国产视频在线观看 | 欧美性受xxxxxx黑人xyx性爽 | 一级毛片免费高清视频 |