利用webdav从exchange读取数据

在MOSS开发中,我们往往会集成Exchange服务器中的邮件等数据,采用WebPart或其他方式。

Exchange 2007中提供了一套简易的Web Service。Exchange 2003中却没有。

考虑到目前很多企业使用的都是Exchange 2003,下面我给出一套实用WebDAV读取Exchange的通用方法。

为了让更多的人使用,示例代码使用普通的asp.net版本。请需要做MOSS的朋友自己改为Web Part。

界面截图

 

首先,定义访问Exchange的基本信息


  string  url  =   " http://10.10.0.1/exchange/ " // 指定Exchange服务器地址 
        System.Net.HttpWebRequest Request;
        System.Net.WebResponse Response;
        System.Net.CredentialCache MyCredentialCache;
        
string  strUserName  =   " L1 " // 指定登录的用户名
         string  strRootURI  =  url  +  strUserName.Trim()  +   " /收件箱/ " // 得到要访问邮箱的WebDAV地址
         string  strPassword  =   " !QAZ1qaz " // 指定该用户的密码
         string  strDomain  =   "huahua .com " // 指定域名

 

然后,构造查询字符串:


 strQuery  =   " <?xml version=/ " 1.0 / " ?><D:searchrequest xmlns:D = / " DAV:/ "  > "
               
+   " <D:sql>SELECT / " urn:schemas:httpmail:importance/ " ,/ " urn:schemas:httpmail:from/ " ,/ " urn:schemas:httpmail:read/ " ,/ " urn:schemas:httpmail:datereceived/ " ,/ " urn:schemas:httpmail:subject/ " ,/ " urn:schemas:httpmail:hasattachment/ " , "
               
+   " / " DAV:contentclass/ " ,/ " DAV:getcontentlength/ " ,/ " DAV:displayname/ ""
               
+   " FROM / ""  + strRootURI +  " / ""
               
+   " WHERE / " DAV:ishidden/ "  = false AND / " DAV:isfolder/ "  = false "
               
+   " </D:sql></D:searchrequest> " ;

 

接下来,构造身份凭证、执行WebDAV的Search



            
//  创建新的CredentialCache对象,构建身份凭据
            MyCredentialCache  =   new  System.Net.CredentialCache();
            MyCredentialCache.Add(
new  System.Uri(strRootURI),
             
" NTLM " ,
             
new  System.Net.NetworkCredential(strUserName, strPassword, strDomain)
             );

            
//  Create the HttpWebRequest object.
            Request  =  (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);

            
//  指定HttpWebRequest的身份凭据,此处为关键所在。如果使用之前
            
//  创建的MyCredentialCache,则这个身份凭据是可以从Web服务器传递
            
//  到Exchange服务器的,但是这样带来的问题也很明显,就是不能够自
            
//  动获取当前登录到域的用户的身份。即便已经成功登录到域,那也只
            
//  能通过form再次输入用户名密码。因此,我在这里用的是
            
//  Request.Credentials = CredentialCache.DefaultCredentials,
            
//  这样便可以获得当前用户的凭据,但是这样带来的问题便是上面提到的
            
//  身份凭据无法传递的问题,解决方法请关注下篇文章。
            Request.Credentials  =  MyCredentialCache;

            
//  指定WebDAV的SEARCH方法
            Request.Method  =   " SEARCH " ;

            
//  Encode the body using UTF-8.
            bytes  =  Encoding.UTF8.GetBytes(( string )strQuery);

            
//  Set the content header length. This must be
            
//  done before writing data to the request stream.
            Request.ContentLength  =  bytes.Length;

            
//  Get a reference to the request stream.
            RequestStream  =  Request.GetRequestStream();

            
//  Write the SQL query to the request stream.
            RequestStream.Write(bytes,  0 , bytes.Length);

            
//  Close the Stream object to release the connection
            
//  for further use.
            RequestStream.Close();

            
//  Set the content type header.
            Request.ContentType  =   " text/xml " ;

            
//  Send the SEARCH method request and get the
            
//  response from the server.
            Response  =  (HttpWebResponse)Request.GetResponse();

            
//  Get the XML response stream.
            ResponseStream  =  Response.GetResponseStream();

           
            ResponseXmlDoc 
=   new  XmlDocument();
            ResponseXmlDoc.Load(ResponseStream);

 

最后,也就是最激动人心的一步:通过解析Xml节点来取得想要的数据。比如:

 

Code

 

其他代码在这里就不一一列举了。 附件是完整的Project。

http://files.cnblogs.com/azure/ReadMailFromEXServer.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值