使用c#取得未读邮件信息(exchange)

    技术2022-05-11  80

    /// <summary>  /// 取得未读邮件信息  /// </summary>  /// <returns></returns>  private int GetUnReadMailCount(string strUserID,string strPassword)  {   string url= ConfigurationSettings.AppSettings["ExchangeServer"];       System.Net.HttpWebRequest Request;   System.Net.WebResponse Response;   System.Net.CredentialCache MyCredentialCache;   string strRootURI = url+"/"+strUserID;   string strUserName = strUserID;   strPassword = strPassword;   string strDomain = ConfigurationSettings.AppSettings["ExchangeDomain"];   string strQuery ="";   byte[] bytes = null;   System.IO.Stream RequestStream = null;   System.IO.Stream ResponseStream = null;   XmlDocument ResponseXmlDoc = null;   XmlNodeList HrefNodes= null;   XmlNodeList SizeNodes= null;   int count=0;   try   {    // Build the SQL query.    strQuery = "<?xml version=/"1.0/"?><D:searchrequest xmlns:D = /"DAV:/" >"     + "<D:sql>SELECT /"DAV:displayname/",/"urn:schemas:httpmail:unreadcount/" FROM /"" + strRootURI + "/""     //    +"where /"DAV:contentclass/"=/"urn:schemas:httpmail:read /""                 //        + "WHERE /"DAV:ishidden/" = false AND /"DAV:isfolder/" = false"     + "</D:sql></D:searchrequest>";

        // Create a new CredentialCache object and fill it with the network    // credentials required to access the server.    MyCredentialCache = new System.Net.CredentialCache();    MyCredentialCache.Add( new System.Uri(strRootURI),     "Basic",     new System.Net.NetworkCredential(strUserName, strPassword, strDomain)//     );//NTLM集成windows验证

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

        // Add the network credentials to the request.    Request.Credentials = MyCredentialCache;

        // 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";

        // 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);    HrefNodes = ResponseXmlDoc.GetElementsByTagName("a:displayname");    SizeNodes = ResponseXmlDoc.GetElementsByTagName("d:unreadcount");    for(int i=0;i<HrefNodes.Count;i++)    {     if(HrefNodes[i].InnerText=="收件箱")      count=int.Parse(SizeNodes[i].InnerText);    }    ResponseStream.Close();    Response.Close();   }   catch(Exception)   {    // Catch any exceptions. Any error codes from the SEARCH    // method request on the server will be caught here, also.    return -1;   }   return count;  } 


    最新回复(0)