如何在asp.net中获取Exchange收件箱中未读邮件的数量?能给源码参考最好!

解决方案 »

  1.   

    没研究过,google得到的,看有没有帮助:There a few ways you could approach this the first is to use the 
    notification sample application in the Exchange SDK I think the source is 
    VB6 but it wouldn't be very hard to translate have a look at 
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wss/wss/_esdk_samples_exchmailnotify_intro.aspThe other thing you could do is setup an event sink maybe on that mailbox 
    that sent out a notification email to everybody when an email arrived or if 
    everyone uses RSS you could write a sink that created an RSS feed on the 
    mailbox eg 
    http://gsexdev.blogspot.com/2004/09/public-folder-rss-feed-event-sink-v2.html
    or if everyone is using Instant messaging you could write a sink that sends 
    an IM to everyone. for more information on Event sync see the Exchange SDK.Code wise in C# webdav is maybe the best option if you need to run the code 
    remotely to count the number of unread email in a mailbox just do a search 
    of the mailbox for unread email eg this is an adapted sample from 
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wss/wss/_exch2k_searching_folders_http.aspusing System;
    using System.Net;
    using System.IO;
    using System.Text;
    using System.Xml;namespace ExchangeSDK.Snippets.CSharp
    {
    class SearchingFoldersWebDAVUnread
    {
      [STAThread]
      static void Main(string[] args)
      {
       // Variables.
       System.Net.HttpWebRequest Request;
       System.Net.WebResponse Response;
       System.Net.CredentialCache MyCredentialCache;
       string strInboxURI = "http://Servername/exchange/mailbox/inbox";
       string strUserName = "username";
       string strPassword = "password";
       string strDomain = "domain";
       string strQuery ="";
       byte[] bytes = null;
       System.IO.Stream RequestStream = null;
       System.IO.Stream ResponseStream = null;
       XmlDocument ResponseXmlDoc = null;
       XmlNodeList DisplayNameNodes = null;   try
       {
        // Build the SQL query.
        strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"     + "<D:sql>SELECT \"DAV:displayname\" FROM \"" + strInboxURI + "\""
         + "WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false"
         + " AND \"urn:schemas:httpmail:read\" = 
    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(strInboxURI),
         "NTLM",
         new System.Net.NetworkCredential(strUserName, strPassword, strDomain)
         );    // Create the HttpWebRequest object.
        Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strInboxURI);    // 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);    // Build a list of the DAV:href XML nodes, corresponding to the folders
        // in the mailbox.  The DAV: namespace is typically assgigned the a:
        // prefix in the XML response body.
        DisplayNameNodes = ResponseXmlDoc.GetElementsByTagName("a:displayname");
        Console.WriteLine("Number of Unread Messages:" + 
    DisplayNameNodes.Count);
        // Clean up.
        ResponseStream.Close();
        Response.Close();   }
       catch(Exception ex)
       {
        // Catch any exceptions. Any error codes from the SEARCH
        // method request on the server will be caught here, also.
        Console.WriteLine(ex.Message);
       }
      }
    }
    }
      

  2.   

    这个不行啊,会报出“远程服务器返回错误:<404>未找到。”
      

  3.   

    codeproject有一个exchange的专栏,逛一下?