现在的位置: 首页 > 综合 > 正文

利用webdav从exchange读取数据

2013年01月31日 ⁄ 综合 ⁄ 共 4938字 ⁄ 字号 评论关闭

在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

抱歉!评论已关闭.