9. März 2009 |
Geändert: 20. Januar 2010 |
MVP | VSTO
Vielleicht hat sich der eine oder andere auch schon einmal gefragt, wo genau der Unterschied zwischen den beiden Outlook-Events NewMail und NewMailEx liegt.
Das NewMail-Event steht ab Outlook 2000 zur Verfügung. Es wird gefeuert, wenn eine oder mehrere E-Mails im Posteingang ankommen. Das NewMail-Event teilt uns aber nicht mit, welche E-Mails neu angekommen sind. Zudem verschluckt sich das Event auch mal gern, wenn mehr als 16 E-Mails gleichzeitig ankommen. Die weiteren E-Mails werden danach nicht mehr beachtet.
Das NewMailEx-Event wurde mit Outlook 2003 neu eingeführt. Es bietet uns einen durch Komma getrennten String an, welcher die EntryIDs der angekommen E-Mails enthält.
NameSpace.GetItemFromID(EntryID)
Mit den folgenden Zeilen können wir uns ganz einfach die neue E-Mail(s) als MailItem aus dem Posteingang holen:
Application.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx);
private void Application_NewMailEx(string EntryIDCollection)
{
string[] entryIDs = EntryIDCollection.Split(',');
MailItem mail;
NameSpace olNS = _app.GetNamespace("MAPI");
MAPIFolder inbox = olNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
for (int i = 0, i <= entryIDs.Count; i++)
{
if (!String.IsNullOrEmtpy(entryIDs[i]))
mail = olNS.GetItemFromID(EntryIDCollection, inbox.StoreID) as MailItem;
//do something
}
}
Des Weiteren wurde auch das Problem mit den 16 gleichzeitig eintreffenden E-Mails behoben. Jedenfalls fast :) Treffen 1000 E-Mails gleichzeitig ein, kann es auch beim NewMailEx-Event passieren, dass sich das Event verschluckt und die nachfolgenden E-Mails missachtet werden. Aber dieser Fall sollte (hoffentlich) nur bei einem PST Merge oder einer Exchange Foldersynchronisation auftreten.
cab73663-ec7c-4c61-a405-f6af0e35cdf8|0|.0