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