作者:仙人掌工作室
POP邮件协议的优点在于它是一个开放的标准,有着完善的文档,这就使得编写POP邮件客户程序不那么困难,只要掌握了POP、SMTP的基础知识,就可以写出代理
程序来执行各种任务,例如过滤广告和垃圾邮件,或提供e-mail自动应答服务。
Hotmail是世界上影响最广的Web邮件系统,遗憾的是,当我们要为Hotmail编写独立的客户程序(不通过浏览器访问的客户
程序)时,马上就会遇到Hotmail不提供POP网关这一障碍。
虽然Hotmail不提供POP支持,但浏览器并非访问Hotmail的唯一途径。例如,利用Outlook Express可以直接连接到标准的Hotmail或MSN信箱,提取、删除、移动或发送邮件。利用HTTP包监视器,我们可以监视到Outlook Express和Hotmail的通信过程,分析出客户
程序如何连接到Hotmail信箱。
Outlook Express利用了一种通常称为HTTPMail的未公开的协议,借助一组HTTP/1.1扩展访问Hotmail。本文将介绍HTTPMail的一些特点以及利用C#客户程序访问Hotmail的过程。本文的示例
程序利用COM互操作将XMLHTTP用作一种传输服务。XMLHTTP组件提供了一个完善的HTTP实现,除了包括认证功能,还能够在发送HTTP请求给服务器之前设置定制的HTTP头。
一、连接HTTPMail网关
Hotmail信箱默认的HTTPMail网关在http://services.msn.com/svcs/hotmail/httpmail.
asp。HTTPMail协议实际上是一个标准的WebDAV服务,只不过尚未公开而已。在编写C#
程序时,我们可以方便地调用.NET框架在System.Net名称空间中提供的各个TCP和HTTP类。另外,由于我们要操作WebDAV,在C#环境下利用XMLHTTP连接Hotmail最为简便,只需引用一下MSXML2组件就可以直接访问。注意在本文的代码片断中,带有下滑线后缀的变量是示例代码中声明的成员域:
// 获得名称空间
using MSXML2;
// 创建对象
xmlHttp_ = new XMLHTTP();
为了连接到安全服务器,WebDAV协议要求执行HTTP/1.1验证。HTTPMail客户
程序发出的第一个请求利用WebDAV PROPFIND方法查找一组属性,其中包括Hotmail广告条的URL以及信箱文件夹的位置:
<?xml version="1.0"?>
<D:propfind xmlns:D="DAV:" xmlns:h="http://schemas.microsoft.com/hotmail/"
xmlns:hm="urn:schemas:httpmail:">
<D:prop>
<h:adbar/>
<hm:contacts/>
<hm:inbox/>
<hm:outbox/>
<hm:sendmsg/>
<hm:sentitems/>
<hm:deleteditems/>
<hm:drafts/>
<hm:msgfolderroot/>
<h:maxpoll/>
<h:sig/>
</D:prop>
</D:propfind>
通过XMLHTTP发送第一个请求时,首先指定WebDAV服务器URL,然后生成XML请求的内容:
// 指定服务器的URL
string serverUrl = "http://services.msn.com/svcs/hotmail/httpmail.asp";
// 构造
查询 string folderQuery = null;
folderQuery += "<?xml version=''1.0''?><D:propfind xmlns:D=''DAV:'' ";
&nb