通过WebDav方法读取EXCHANGE邮件的方法

       可以通过WEBDAV的方法读取EXCHANGE的邮件信息,在E8.Net工作流架构的应用程序中有过这样开发案例,因为客户可能一开始不习惯用OUTLOOK等工具去阅读邮件,所以通过。NET程序读取exchange中的邮件信息,展示在用户的首页上。

代码如下:

 

/// <summary>
        
/// 取得未读邮件信息
        
/// </summary>
        
/// <returns></returns>

         private   string  GetUnReadMailList( string  strUserID,  string  strPassword)
        
{
            
string url = System.Configuration.ConfigurationManager.AppSettings["ExchangeServer"];
            System.Net.HttpWebRequest Request;
            System.Net.WebResponse Response;
            System.Net.CredentialCache MyCredentialCache;
            
string strRootURI = url + "/" + strUserID + "/收件箱";
            
string strUserName = strUserID;
            
//string strDomain = ConfigurationSettings.AppSettings["ExchangeDomain"];
            string strDomain = System.Configuration.ConfigurationManager.AppSettings["Domain"];
            
string strQuery = "";
            
byte[] bytes = null;
            System.IO.Stream RequestStream 
= null;
            System.IO.Stream ResponseStream 
= null;
            XmlDocument ResponseXmlDoc 
= null;

            Epower.DevBase.Organization.SqlDAL.UserEntity user 
= new Epower.DevBase.Organization.SqlDAL.UserEntity(strUserID);

            
string strEmailXml = "";
            
try
            
{

                strQuery 
= "<?xml version="1.0"?><D:searchrequest xmlns:D = "DAV:" >"
                 
+ "<D:sql>SELECT "DAV:displayname","urn:schemas:mailheader:subject","
                      
//  + ""urn:schemas:mailheader:approved ","
                      
//   + ""urn:schemas:mailheader:comment ","
                          + ""urn:schemas:mailheader:from","
                       
+ ""urn:schemas:mailheader:date" FROM "" + strRootURI + """
                       
+ "where "urn:schemas:httpmail:read"=false"
                    
//    + "WHERE "DAV:ishidden" = false AND "DAV:isfolder" = false"
                 + "</D:sql></D:searchrequest>";

                         
//集成验证方式下代码
                Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);
                Request.Timeout 
= 300000;   //超时 5分钟
                MyCredentialCache = new System.Net.CredentialCache();
                MyCredentialCache.Add(
new System.Uri(strRootURI),
                 
"NTLM",
                 
new System.Net.NetworkCredential(strUserName, user.Password, strDomain)//
                 );//NTLM集成windows验证  Basic 基本验证
                Request.Credentials = MyCredentialCache;
                
//Request.Credentials = CredentialCache.DefaultNetworkCredentials;
              


                
// Specify the method.
                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;charset="utf-8"";

                

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

                

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

                
// Create the XmlDocument object from the XML response stream.
                ResponseXmlDoc = new XmlDocument();
                ResponseXmlDoc.Load(ResponseStream);


  

                strEmailXml 
= ResponseXmlDoc.InnerXml;

                ResponseStream.Close();
                Response.Close();
            }

            
catch (Exception e)
            
{
                
// Catch any exceptions. Any error codes from the SEARCH
                
// method request on the server will be caught here, also.
                return "";
            }

            
return strEmailXml;
        }

返回的也是XML串,经过一些处理便可以以一定的格式展示邮件的信息了

代码的关键是 strQuery的XML查询串

相关语法及信息可以参考:

   http://msdn2.microsoft.com/en-us/library/ms527286.aspx

  从这里可以找到各种字段和命名空间的意义.

 

通过 WebDav的方法 不但可以取得exchange邮件的信息、邮件数量,还可以与exchange日历进行交互。

在E8.Net工作流的一些合作伙伴中已经实现在 工作流的业务处理接口中,根据预计时间将待办事项写入exchange的日历中。 用户通过OUTLOOK的日历直接进入事项的相关处理。实现方法也是通过WEBDAV。 与获取邮件的方法类似。

 

E8.Net工作流架构,企业应用开发的利器 http://www.feifanit.com.cn/productFlow.htm

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值