| Author |
Message |
Guest
|
Posted:
Tue Nov 29, 2005 1:12 am Post subject:
C# Exchange Mailbox Checker App |
|
|
Does anyone know the first bit about how I could write a simple C# app
that gets the number of unread messages in an exchange mailbox? We
work on a small helpdesk here and I have to find a better way to get
the word out that a new message has arrived in a shared mailbox without
forwarding it to everyone and without having to look for the little
number next to the mailbox all day...
Ideas?
Thanks,
Jacob
|
|
| Back to top |
|
 |
wannaknowmore
Guest
|
Posted:
Tue Nov 29, 2005 1:58 am Post subject:
Re: C# Exchange Mailbox Checker App |
|
|
Depending on your IT infrastructure/constraints and the technology you
are allowed used you could use WEBDAV, MAPI or POP3.
I would suggest WEBDAV which is sure to work in pretty much any
infrastructure but is a bit difficult to implement.
Hope that helps,
Rahul |
|
| Back to top |
|
 |
Glen Scales [MVP]
Guest
|
Posted:
Tue Nov 29, 2005 1:58 am Post subject:
Re: C# Exchange Mailbox Checker App |
|
|
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.asp
The 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.asp
using 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:\"
| Quote: | "
+ "<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);
}
}
}
}
Cheers
Glen
<jacob.eiler@gmail.com> wrote in message
news:1133205155.924829.42130@z14g2000cwz.googlegroups.com...
| Quote: | Does anyone know the first bit about how I could write a simple C# app
that gets the number of unread messages in an exchange mailbox? We
work on a small helpdesk here and I have to find a better way to get
the word out that a new message has arrived in a shared mailbox without
forwarding it to everyone and without having to look for the little
number next to the mailbox all day...
Ideas?
Thanks,
Jacob
|
|
|
| Back to top |
|
 |
|
|
|
|