sp; folderQuery += "xmlns:h=''http://schemas.microsoft.com/hotmail/'' ";
folderQuery += "xmlns:hm=''urn:schemas:httpmail:''><D:prop><h:adbar/>";
folderQuery += "<hm:contacts/><hm:inbox/><hm:outbox/><hm:sendmsg/>";
folderQuery += "<hm:sentitems/><hm:deleteditems/><hm:drafts/>";
folderQuery += "<hm:msgfolderroot/><h:maxpoll/><h:sig/></D:prop></D:propfind>";
XMLHTTP组件提供了一个open()方法来建立与HTTP服务器的连接:
void open(string method, string url, bool async, string user, string password);
open()方法的第一个参数指定了用来打开连接的HTTP方法,例如GET、POST、PUT或PROPFIND,通过这些HTTP方法我们可以提取文件夹信息、收集邮件或发送新邮件。为连接到Hotmail网关,我们指定用PROPFIND方法来
查询信箱。注意open()方法允许执行异步调用(默认启用),对于带图形用户界面的邮件客户程序来说,异步调用是最理想的调用方式。由于本文的示例
程序是一个控制台应用,我们把这个参数设置成false。
为了执行身份验证,我们在open()方法中指定了用户名字和密码。在使用XMLHTTP组件时,如果open()方法没有提供用户名字和密码参数,但网站要求执行身份验证,XMLHTTP将显示出一个登录窗口。为了打开通向Hotmail网关的连接,我们把PROPFIND请求的头设置成XML
查询的内容,消息的正文保持空白,然后发送消息:
// 打开一个通向Hotmail服务器的连接
xmlHttp_.open("PROPFIND", serverUrl, false, username, password);
// 发送请求
xmlHttp_.setRequestHeader("PROPFIND", folderQuery);
xmlHttp_.send(null);
二、分析信箱的文件夹列表
发送给services.msn.com的请求通常要经历几次重定向,经过服务器端的负载平衡处理,最后请求会被传递到一个空闲的Hotmail服务器,并执行身份验证。在客户端,这个重定向、执行身份验证的交互过程由XMLHTTP组件负责处理。成功建立连接后,服务器还会要求设置一些Cookie、验证当前会话的合法性,这部分工作同样也由XMLHTTP组件自动处理。初始的连接请求发出之后,服务器将返回一个XML格式的应答:
// 获得应答的内容
string folderList = xmlHttp_.responseText;
服务器返回的应答包含许多有用的信息,其中包括信箱中文件夹的URL位置,下面是一个例子:
<?xml version="1.0" encoding="Windows-1252"?>
<D:response>
<D:propstat>
<D:prop>
<h:adbar>AdPane=Off*</h:adbar>
<hm:contacts>http://law15.oe.hotmail.com/</hm:contacts>
<hm:inbox>http://law15.oe.hotmail.com/</hm:inbox>
<hm:sendmsg>http://law15.oe.hotmail.com/</hm:sendmsg>
<hm:sentitems>http://law15.oe.hotma