主頁(yè) > 知識(shí)庫(kù) > JavaMail訪問(wèn)Hotmail郵箱

JavaMail訪問(wèn)Hotmail郵箱

熱門(mén)標(biāo)簽:開(kāi)封便宜外呼系統(tǒng)報(bào)價(jià) 商丘百應(yīng)電話機(jī)器人有沒(méi)有效果 漯河辦理400電話 黃石智能營(yíng)銷(xiāo)電銷(xiāo)機(jī)器人效果 騰訊地圖標(biāo)注商戶(hù)改名注冊(cè)入駐 怎樣把地圖標(biāo)注出來(lái) 淮南騰訊地圖標(biāo)注 地圖標(biāo)注人員兼職 電話機(jī)器人的特色和創(chuàng)新
相信許多人都有MSN聊天工具的帳號(hào),例如abc@hotmail.com ,這個(gè)賬號(hào)其實(shí)也是一個(gè)郵件地址,可以進(jìn)行正常的郵件收發(fā)功能,你可以通過(guò)網(wǎng)址 http://www.hotmail.com 來(lái)訪問(wèn)和操作這個(gè)郵箱進(jìn)行郵件的收發(fā)。但是這個(gè)郵箱有一個(gè)限制就是它并不提供POP3或者SMTP服務(wù),也就是說(shuō)一般的郵件客戶(hù)端工具無(wú)法使用這個(gè)郵箱,雖然現(xiàn)在有不少的郵件工具可以支持Hotmail郵箱,但是如果我們需要在我們的Java項(xiàng)目中增加對(duì)Hotmail郵箱的支持,那往往會(huì)不知從什么地方開(kāi)始入手,因?yàn)镾UN公司提供的JavaMail 本身并不提供對(duì)除了POP3/IMAP以及SMTP外其他協(xié)議的支持。

  但事實(shí)上,JavaMail只是定義了一組平臺(tái)無(wú)關(guān)、獨(dú)立于通訊協(xié)議的郵件程序框架,或者說(shuō)是接口,它是作為Java的可選包存在的。因此可以這樣說(shuō):JavaMail并不關(guān)心所使用的協(xié)議,不管是POP3、SMTP、IMAP當(dāng)然還有Hotmail用的HTTP協(xié)議。對(duì)于JavaMail的客戶(hù)端而言也是這樣的,下圖就是一個(gè)最簡(jiǎn)單的JavaMail結(jié)構(gòu)圖,通過(guò)Transport進(jìn)行郵件的發(fā)送,通過(guò)Store實(shí)現(xiàn)對(duì)郵件的收取,而不同協(xié)議的實(shí)現(xiàn),JavaMail里的概念叫做Provider,只需要根據(jù)JavaMail定義的接口實(shí)現(xiàn)自己的Provider即可。


  為了實(shí)現(xiàn)通過(guò)JavaMail訪問(wèn)Hotmail郵箱,我們就需要架起JavaMail接口與Hotmail服務(wù)所提供的訪問(wèn)接口之間的橋梁。在這之前我們必須首先了解Hotmail所使用的接口協(xié)議。

  Hotmail通過(guò)地址 http://services.msn.com/svcs/hotmail/httpmail.asp 提供基于HTTP協(xié)議的服務(wù),它不同于我們通過(guò)瀏覽器訪問(wèn) http://www.hotmail.com 的這個(gè)地址,后面這個(gè)地址是提供給用戶(hù)一個(gè)基于瀏覽器的訪問(wèn)界面以便對(duì)郵箱進(jìn)行操作,你當(dāng)然可以通過(guò)編寫(xiě)HTTP客戶(hù)端程序來(lái)解析頁(yè)面并獲取郵件的信息,但是這樣做不僅實(shí)現(xiàn)的復(fù)雜程度非常高,而且每次頁(yè)面風(fēng)格發(fā)生變化后程序都要做相應(yīng)的調(diào)整,因此不具備通用性,顯然是不可行的。而地址 http://services.msn.com/svcs/hotmail/httpmail.asp 則不同,它提供了固定的應(yīng)用程序接口。當(dāng)你使用瀏覽器訪問(wèn)該地址的時(shí)候,會(huì)彈出下面要求登錄的窗體:


  而當(dāng)輸入正確的用戶(hù)名和口令后會(huì)再?gòu)棾鲆淮位騼纱卧撎崾敬翱冢崾拘畔⒉煌?,操作完成后出現(xiàn)頁(yè)面無(wú)法顯示的錯(cuò)誤,錯(cuò)誤碼是 405 (資源不允許)。因此該服務(wù)并不允許通過(guò)瀏覽器來(lái)訪問(wèn)。

  事實(shí)上Hotmail使用的是WebDAV來(lái)提供基于HTTP協(xié)議的應(yīng)用編程接口,WebDAV(Web 分布式創(chuàng)作和版本控制)已經(jīng)成為重要的 Web 通訊協(xié)議。WebDAV所要解決的問(wèn)題是:

  1.改寫(xiě)保護(hù):HTTP 1.1 無(wú)法確保客戶(hù)端可以保護(hù)資源,并且可以在其他客戶(hù)端同時(shí)編輯它們的情況下進(jìn)行更改。 使用 WebDAV,可以通過(guò)多種方式來(lái)鎖定資源,以便讓其他客戶(hù)端知道您對(duì)所討論的資源感興趣,或者防止其他客戶(hù)端訪問(wèn)該資源。

  2.資源管理:HTTP 只能直接訪問(wèn)單個(gè)資源。 WebDAV 提供一種更有效地組織數(shù)據(jù)的方法。 WebDAV 引入了可包含資源 的集合(類(lèi)似于文件系統(tǒng)文件夾)概念。 通過(guò) WebDAV 進(jìn)行的資源管理包括如下功能:創(chuàng)建、移動(dòng)、復(fù)制和刪除集合,以及集合中的資源或文件。

  3.文檔屬性:不同類(lèi)型的數(shù)據(jù)具有唯一的屬性,這有助于描述數(shù)據(jù)。 例如,在電子郵件中,這些屬性可能是發(fā)件人的姓名和接收郵件的時(shí)間。 在協(xié)作文檔中,這些屬性可能是文檔原始作者的姓名和最后一個(gè)編輯者的姓名。 因?yàn)槿藗兪褂玫奈臋n類(lèi)型各不相同,所以可能的屬性類(lèi)型列表也變得無(wú)限大。 XML 是 WebDAV 所需的一種可擴(kuò)展通訊工具。

  關(guān)于WebDAV的更多資料可以參閱本文最后的參考資料。

  相對(duì)于自行解析Hotmail的瀏覽器頁(yè)面而言,基于特定協(xié)議WebDAV的接口使Hotmail郵件客戶(hù)端程序的實(shí)現(xiàn)更加穩(wěn)定和可靠。在了解了JavaMail API的基本接口以及Hotmail所提供接口的協(xié)議,本文的題目就變得非常具體了,就是如果編寫(xiě)基于WebDAV的JavaMail Provider(JavaMail提供者)并使用這個(gè)提供者來(lái)實(shí)現(xiàn)Hotmail郵件收發(fā)功能,但這題目太大而且已經(jīng)超過(guò)了一篇文章所能敘述的范圍,因此我們接下來(lái)將引入一個(gè)開(kāi)放源碼項(xiàng)目JDAVMail,并詳細(xì)介紹如何通過(guò)這個(gè)項(xiàng)目實(shí)現(xiàn)Hotmail郵件的收發(fā)功能。

  JDAVMail 是一個(gè)開(kāi)放源碼的JavaMail的提供者項(xiàng)目,可以通過(guò)它來(lái)訪問(wèn)基于WebDAV協(xié)議的郵件服務(wù),有如Hotmail郵箱。你可以到 http://sourceforge.net/projects/jdavmail 這個(gè)網(wǎng)址下載到最新版本的程序。JDAVMail使用了Jakarta上的commons httpclient 作為HTTP客戶(hù)端組件與服務(wù)器進(jìn)行通訊,同時(shí)使用了jdom進(jìn)行XML數(shù)據(jù)的解析,另外由于httpclient項(xiàng)目用到了commons logging進(jìn)行日記的輸出,因此commons-logging也是必須的,這三個(gè)組件都可以在JDAVMail的壓縮包中的lib目錄中找到,壓縮包中同時(shí)還包括已編譯的jar文件以及所有的源碼。
   為了讓大家對(duì)JDAVMail有個(gè)大概的認(rèn)識(shí),下面我們給出兩段代碼用于Hotmail郵件的收發(fā):

  1. 郵件收取

  /*
  * 文件名:HotmailDemo.java
  * 創(chuàng)建時(shí)間:2004-9-14
  * 創(chuàng)建者:liudong
  */
  package com.clickcom.mail;

  import java.util.Date;
  import java.util.Properties;

  import javax.mail.Folder;
  import javax.mail.Message;
  import javax.mail.Session;
  import javax.mail.Store;
  import javax.mail.Transport;
  import javax.mail.internet.InternetAddress;
  import javax.mail.internet.MimeMessage;

  /**
  * Hotmail郵件的收發(fā)器
  * @author liudong
  */
  public class HotmailDemo {
  public static void main(String[] args) {
  receive();
  }

  /**
  * 郵件接收
  */

   protected static void receive() {
  try {
   Properties prop = new Properties();
   Session ses = Session.getInstance(prop);
   //使用JDAVMail Provider
   Store store = ses.getStore("davmail");
   //無(wú)需指定服務(wù)器地址
   store.connect(null, "你的帳號(hào)","密碼");
   if (store.isConnected()) {
    Folder inbox = store.getFolder("INBOX");
    if (inbox.exists()) {
     inbox.open(Folder.READ_ONLY);
     int nCount = inbox.getMessageCount();
     System.out.println("Inbox contains " + nCount + " messages");
     // 依次顯示收件箱中的每封郵件
     for(int i=1;i=nCount;i++){
      MimeMessage msg = (MimeMessage) inbox.getMessage(i);
      System.out.println("Subject : " + msg.getSubject());
      System.out.println("From : " + msg.getFrom()[0].toString());
      System.out.println("Content type : " + msg.getContentType());
      System.out.println(msg.getContent());
     }
    }
   }
  } catch (Exception ex) {
   ex.printStackTrace();
  }
  }
  }

  從上面這段代碼我們發(fā)現(xiàn)除了 Store store = ses.getStore("davmail"); 這個(gè)語(yǔ)句,同時(shí)不需要指定服務(wù)器地址外,其他的都跟一個(gè)普通的JavaMail應(yīng)用程序沒(méi)有兩樣,也沒(méi)有引入任何跟JDAVMail有關(guān)的類(lèi)。沒(méi)有指定服務(wù)器地址這個(gè)比較容易理解,因?yàn)镠otmail提供HttpMail服務(wù)的地址是固定的。事實(shí)上僅有g(shù)etStore這個(gè)語(yǔ)句跟常規(guī)郵件客戶(hù)端程序有點(diǎn)不同的是它使用davmail字符串作為參數(shù),而我們?cè)谑褂肑avaMail連接POP3服務(wù)器的時(shí)候指定參數(shù)值為pop3。怎么回事呢?因?yàn)镴avaMail是通過(guò)協(xié)議名來(lái)加載Provider類(lèi)的。打開(kāi)JDAVMail.0.9.006.jar這個(gè)jar文件就會(huì)發(fā)現(xiàn)在META-INF目錄下有一個(gè)文件javamail.providers,該文件內(nèi)容如下:

  protocol=davmail;
  type=store; class=com.posisoft.jdavmail.JDAVMailStore;
  vendor=Positive Software;
  protocol=davmail_xmit;
  type=transport;
  class=com.posisoft.jdavmail.JDAVMailTransport;
  vendor=Positive Software;

  因此當(dāng)我們指定協(xié)議名為davmail時(shí),JavaMail就會(huì)自動(dòng)加載com.posisoft.jdavmail.JDAVMailStore類(lèi)進(jìn)行處理,因此通過(guò)傳入davmail字符串所得到的store實(shí)例實(shí)際上是類(lèi)com.posisoft.jdavmail.JDAVMailStore的一個(gè)實(shí)例,這樣我想大家應(yīng)該了解了前面這段程序的工作原理。

  我們?cè)賮?lái)看JDAVMail發(fā)送郵件的代碼片段:

  /**
  * 郵件發(fā)送
  */
  protected static void send() {
  try {
  Properties prop = new Properties();
  //郵件發(fā)送者地址
  prop.setProperty("mail.davmail.from","abc@hotmail.com");
  Session ses = Session.getInstance(prop);
  //獲得JDAVMail的郵件發(fā)送實(shí)例
  Transport transport = ses.getTransport("davmail_xmit");
  //連接到Hotmail服務(wù)器,請(qǐng)?zhí)鎿Q為自己的用戶(hù)名和口令
  transport.connect(null, "用戶(hù)名","口令");

  // 準(zhǔn)備要發(fā)送的郵件
  MimeMessage txMsg = new MimeMessage(ses);
  txMsg.setSubject("This is the subject");

  //郵件發(fā)送者地址
  InternetAddress addrFrom = new InternetAddress("abc@hotmail.com");
  txMsg.setFrom(addrFrom);

  //郵件接收者地址
  InternetAddress addrTo = new InternetAddress("cdef@hotmail.com", "cdef");
  txMsg.addRecipient(Message.RecipientType.TO, addrTo);

  //郵件內(nèi)容
  txMsg.setText("Hello world !");
  txMsg.setSentDate(new Date());

  //發(fā)送郵件
  transport.sendMessage(txMsg, txMsg.getAllRecipients());
  } catch (Exception ex) {
  ex.printStackTrace();
  }
  }

  同樣這段代碼使用了davmail_xmit協(xié)議來(lái)獲取JDAVMail的郵件發(fā)送實(shí)例,通過(guò)前面提到的javamail.providers文件不難知道JDAVMail使用類(lèi)com.posisoft.jdavmail.JDAVMailTransport進(jìn)行郵件的發(fā)送處理。

  在實(shí)際測(cè)試中發(fā)現(xiàn)不管是JDAVMail還是其他的郵件工具,使用Hotmail進(jìn)行郵件的發(fā)送速度比較慢,差不多有幾分鐘后才能收到相應(yīng)的信息,因此如果測(cè)試中發(fā)現(xiàn)該問(wèn)題請(qǐng)耐心等待。

  我想通過(guò)本文介紹如何利用JDAVMail收發(fā)Hotmail郵件,以及研究JDAVMail的源碼,不僅可以更加深入了解JavaMail的體系結(jié)構(gòu),對(duì)編寫(xiě)JavaMail Provider也有更加具體的參照。另外希望為正困撓于如何在Java程序中訪問(wèn)Hotmail郵件的朋友們排憂解難。同時(shí)也非常歡迎通過(guò)我的網(wǎng)站 http://www.javayou.com 跟我交流在使用中遇到的問(wèn)題。
您可能感興趣的文章:
  • java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法
  • Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件
  • java中javamail收發(fā)郵件實(shí)現(xiàn)方法
  • Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件
  • struts2集成javamail發(fā)郵件示例詳解
  • JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法
  • 基于JavaMail的常用類(lèi)詳細(xì)介紹
  • JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能實(shí)例詳解
  • javamail 發(fā)送郵件的實(shí)例代碼分享
  • 使用JavaMail發(fā)送郵件保證成功的方法

標(biāo)簽:岳陽(yáng) 紅河 亳州 拉薩 大興安嶺 馬鞍山 武威 鄭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JavaMail訪問(wèn)Hotmail郵箱》,本文關(guān)鍵詞  JavaMail,訪問(wèn),Hotmail,郵箱,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《JavaMail訪問(wèn)Hotmail郵箱》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于JavaMail訪問(wèn)Hotmail郵箱的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章