[size=large]http://blog.csdn.net/changlich/archive/2007/01/01/1472089.aspx

相信许多人都有msn聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发。但是这个邮箱有一个限制就是它并不提供pop3或者smtp服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持hotmail邮箱,但是如果我们需要在我们的java项目中增加对hotmail邮箱的支持,那往往会不知从什么地方开始入手,因为sun公司提供的javamail 本身并不提供对除了pop3/imap以及smtp外其他协议的支持。
但事实上,javamail只是定义了一组平台无关、独立于通讯协议的邮件程序框架,或者说是接口,它是作为java的可选包存在的。因此可以这样说:javamail并不关心所使用的协议,不管是pop3、smtp、imap当然还有hotmail用的http协议。对于javamail的客户端而言也是这样的,下图就是一个最简单的javamail结构图,通过transport进行邮件的发送,通过store实现对邮件的收取,而不同协议的实现,javamail里的概念叫做provider,只需要根据javamail定义的接口实现自己的provider即可。

为了实现通过javamail访问hotmail邮箱,我们就需要架起javamail接口与hotmail服务所提供的访问接口之间的桥梁。在这之前我们必须首先了解hotmail所使用的接口协议。

hotmail通过地址 http://services.msn.com/svcs/hotmail/httpmail.asp 提供基于http协议的服务,它不同于我们通过浏览器访问 http://www.hotmail.com 的这个地址,后面这个地址是提供给用户一个基于浏览器的访问界面以便对邮箱进行操作,你当然可以通过编写http客户端程序来解析页面并获取邮件的信息,但是这样做不仅实现的复杂程度非常高,而且每次页面风格发生变化后程序都要做相应的调整,因此不具备通用性,显然是不可行的。而地址 http://services.msn.com/svcs/hotmail/httpmail.asp 则不同,它提供了固定的应用程序接口。当你使用浏览器访问该地址的时候,会弹出下面要求登录的窗体:

而当输入正确的用户名和口令后会再弹出一次或两次该提示窗口,但提示信息不同,操作完成后出现页面无法显示的错误,错误码是 405 (资源不允许)。因此该服务并不允许通过浏览器来访问。

事实上hotmail使用的是webdav来提供基于http协议的应用编程接口,webdav(web 分布式创作和版本控制)已经成为重要的 web 通讯协议。webdav所要解决的问题是:

1.改写保护:http 1.1 无法确保客户端可以保护资源,并且可以在其他客户端同时编辑它们的情况下进行更改。 使用 webdav,可以通过多种方式来锁定资源,以便让其他客户端知道您对所讨论的资源感兴趣,或者防止其他客户端访问该资源。

2.资源管理:http 只能直接访问单个资源。 webdav 提供一种更有效地组织数据的方法。 webdav 引入了可包含资源 的集合(类似于文件系统文件夹)概念。 通过 webdav 进行的资源管理包括如下功能:创建、移动、复制和删除集合,以及集合中的资源或文件。

3.文档属性:不同类型的数据具有唯一的属性,这有助于描述数据。 例如,在电子邮件中,这些属性可能是发件人的姓名和接收邮件的时间。 在协作文档中,这些属性可能是文档原始作者的姓名和最后一个编辑者的姓名。 因为人们使用的文档类型各不相同,所以可能的属性类型列表也变得无限大。 xml 是 webdav 所需的一种可扩展通讯工具。

关于webdav的更多资料可以参阅本文最后的参考资料。

相对于自行解析hotmail的浏览器页面而言,基于特定协议webdav的接口使hotmail邮件客户端程序的实现更加稳定和可靠。在了解了javamail api的基本接口以及hotmail所提供接口的协议,本文的题目就变得非常具体了,就是如果编写基于webdav的javamail provider(javamail提供者)并使用这个提供者来实现hotmail邮件收发功能,但这题目太大而且已经超过了一篇文章所能叙述的范围,因此我们接下来将引入一个开放源码项目jdavmail,并详细介绍如何通过这个项目实现hotmail邮件的收发功能。

jdavmail 是一个开放源码的javamail的提供者项目,可以通过它来访问基于webdav协议的邮件服务,有如hotmail邮箱。你可以到 http://sourceforge.net/projects/jdavmail 这个网址下载到最新版本的程序。jdavmail使用了jakarta上的commons httpclient 作为http客户端组件与服务器进行通讯,同时使用了jdom进行xml数据的解析,另外由于httpclient项目用到了commons logging进行日记的输出,因此commons-logging也是必须的,这三个组件都可以在jdavmail的压缩包中的lib目录中找到,压缩包中同时还包括已编译的jar文件以及所有的源码。

为了让大家对jdavmail有个大概的认识,下面我们给出两段代码用于hotmail邮件的收发:

1. 邮件收取

/*
* 文件名:hotmaildemo.java
* 创建时间:2004-9-14
* 创建者: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邮件的收发器
* @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");
//无需指定服务器地址
store.connect(null, "你的帐号","密码");
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();
}
}
}

从上面这段代码我们发现除了 store store = ses.getstore("davmail"); 这个语句,同时不需要指定服务器地址外,其他的都跟一个普通的javamail应用程序没有两样,也没有引入任何跟jdavmail有关的类。没有指定服务器地址这个比较容易理解,因为hotmail提供httpmail服务的地址是固定的。事实上仅有getstore这个语句跟常规邮件客户端程序有点不同的是它使用davmail字符串作为参数,而我们在使用javamail连接pop3服务器的时候指定参数值为pop3。怎么回事呢?因为javamail是通过协议名来加载provider类的。打开jdavmail.0.9.006.jar这个jar文件就会发现在meta-inf目录下有一个文件javamail.providers,该文件内容如下:

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;

因此当我们指定协议名为davmail时,javamail就会自动加载com.posisoft.jdavmail.jdavmailstore类进行处理,因此通过传入davmail字符串所得到的store实例实际上是类com.posisoft.jdavmail.jdavmailstore的一个实例,这样我想大家应该了解了前面这段程序的工作原理。

我们再来看jdavmail发送邮件的代码片段:

/**
* 邮件发送
*/
protected static void send() {
try {
properties prop = new properties();
//邮件发送者地址
prop.setproperty("mail.davmail.from","abc@hotmail.com");
session ses = session.getinstance(prop);
//获得jdavmail的邮件发送实例
transport transport = ses.gettransport("davmail_xmit");
//连接到hotmail服务器,请替换为自己的用户名和口令
transport.connect(null, "用户名","口令");

// 准备要发送的邮件
mimemessage txmsg = new mimemessage(ses);
txmsg.setsubject("this is the subject");

//邮件发送者地址
internetaddress addrfrom = new internetaddress("abc@hotmail.com");
txmsg.setfrom(addrfrom);

//邮件接收者地址
internetaddress addrto = new internetaddress("cdef@hotmail.com", "cdef");
txmsg.addrecipient(message.recipienttype.to, addrto);

//邮件内容
txmsg.settext("hello world !");
txmsg.setsentdate(new date());

//发送邮件
transport.sendmessage(txmsg, txmsg.getallrecipients());
} catch (exception ex) {
ex.printstacktrace();
}
}

同样这段代码使用了davmail_xmit协议来获取jdavmail的邮件发送实例,通过前面提到的javamail.providers文件不难知道jdavmail使用类com.posisoft.jdavmail.jdavmailtransport进行邮件的发送处理。

在实际测试中发现不管是jdavmail还是其他的邮件工具,使用hotmail进行邮件的发送速度比较慢,差不多有几分钟后才能收到相应的信息,因此如果测试中发现该问题请耐心等待。[/size]

通过JavaMail访问Hotmail邮箱相关推荐

  1. 通过JavaMail访问Hotmail邮箱 .

    相信许多人都有msn聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问 ...

  2. JavaMail 访问Hotmail

    Hotmail使用的是WebDAV来提供基于HTTP协议的应用编程接口,WebDAV(Web 分布式创作和版本控制)已经成为重要的 Web 通讯协议.WebDAV所要解决的问题是: 1.改写保护:HT ...

  3. java发送hotmail邮件_利用javamail收取Hotmail的退信

    利用javamail收取Hotmail的退信 (2007-04-05 23:44:19) Hotmail 是我最常用的Email Client.虽然时下hotmail的容量是小了些,速度也常常慢得让人 ...

  4. 微软升至live.com后hotmail邮箱不能登录的应急方法。

    前阵子微软把.Net Passport转到live.com上,当时还兴奋.激动了一阵子.可最近却发现怎么也登录不进去了,hotmail邮箱里面的邮件根本无法查收. 真不知道微软是怎么搞的.还是仅国内的 ...

  5. hotmail邮箱不能打开解决方法

    hotmail在升级,也有说是由于微软正在宣传新产品WindowsLive系统,所以将所有登陆程序从Passport网站转移到Live网站.由于国内运营商还没有将Live网站加入可访问区域,造成登陆系 ...

  6. 用OWA访问Exchange邮箱

    OWA是Outlook Web Access的缩写,OWA允许用户用浏览器通过HTTP/HTTPS访问Exchange邮箱,是一种重要的在线访问方式.<?xml:namespace prefix ...

  7. Outlook通过RPC或RPC over HTTPS访问Exchane邮箱:Exchange2003系列之四

    Outlook通过RPC/RPC Over HTTPS访问Exchange邮箱 我们在前面的文章中已经介绍了Exchange邮箱的创建和配置,现在我们来看看如何访问Exchange邮箱.访问邮箱我们可 ...

  8. 用C#访问Hotmail -转

    POP邮件协议的优点在于它是一个开放的标准,有着完善的文档,这就使得编写POP邮件客户程序不那么困难,只要掌握了POP.SMTP的基础知识,就可以写出代理程序来执行各种任务,例如过滤广告和垃圾邮件,或 ...

  9. Powershell管理系列(十一)Exchange完全访问权限邮箱的设置

    -----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 首先说明下一些赋予及取消完全访问 ...

最新文章

  1. pyqt5 视频播放器
  2. 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )
  3. Js作用域链及变量作用域
  4. ASP.NET 访问共享文件夹
  5. webpack配置es6开发环境
  6. 为什么要在WebAssembly中使用Rust?
  7. css3滚动倾斜,jQuery 3D倾斜滚动页面效果
  8. 2018程序员必备的4大网站推荐(代码、编程、SQL等)
  9. python调用aws接口添加安全组策略
  10. c# 计算时间间隔的方法(转)
  11. 游戏平台搭建免费版教程
  12. 王垠系列博文(题名外挂URL)
  13. cf----2019-10-06(Slime,Shashlik Cooking,Mysterious Crime)
  14. 群晖docker创建运行spring cloud微服务
  15. Zcash中的zk-SNARK statements
  16. 激光测距仪非接触式地表裂缝监测仪
  17. 学习软件工程导论的心得体会
  18. 全新 App Store 发布!全新设计、每日推荐、游戏独立
  19. 【太阳软件】动态ip代理为你详解这些长得很像的代理模式
  20. 免费域名注册-(Free domains for all)

热门文章

  1. 桓台一中高考2021成绩查询,2021年淄博高考状元是谁分数多少分,历年淄博高考状元名单...
  2. 公众号运营之如何正确的做好原创保护
  3. 特征点检测之SURF
  4. 机载雷达导论(第24~28章)
  5. php实现解析二维码内容
  6. 思科计算机第七章答案,CCNA第七章 访问控制列表 练习
  7. 【2019CVPR学习】翻译-Graph Attention Convolution for Point Cloud Semantic Segmentation
  8. 我6个月的学习苹果编程经历:从”大齿怪“到“狂欢者”
  9. 详解QQDIY名片json代码
  10. HTTP协议header标头详解