using System; using System.Linq; using Microsoft.Office.Interop.Outlook; using System.Collections.Generic; namespace EmailReceiver { class Program { static ApplicationClass outlookApp = new Microsoft.Office.Interop.Outlook.ApplicationClass(); static NameSpace ns; static void Main(string[] args) { Console.WriteLine("start to monitor new emails"); ns = outlookApp.GetNamespace("MAPI"); outlookApp.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(outlookApp_NewMailEx); outlookApp.NewMail += new ApplicationEvents_11_NewMailEventHandler(outlookApp_NewMail); while (true) { } } static void outlookApp_NewMail() { Console.WriteLine("a new message comes: new email"); } static void outlookApp_NewMailEx(string EntryIDCollection) { Console.WriteLine("a new message comes"); AnalyzeNewItem(EntryIDCollection); } private static void AnalyzeNewItem(string entry) { var inbox = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox); List<MailItem> allmails = new List<MailItem>(); foreach (var item in inbox.Items) { if (item is MailItem) { var mail = item as MailItem; allmails.Add(mail); } } var latest = allmails.Max(s => s.ReceivedTime); var latestMailItem = allmails.FirstOrDefault(s => s.ReceivedTime == latest); if (latestMailItem != null) { Console.WriteLine(latestMailItem.Subject); Console.WriteLine(latestMailItem.To); Console.WriteLine(latestMailItem.SenderName); Console.WriteLine(latestMailItem.ReceivedTime); Console.WriteLine(latestMailItem.Body); } } } }
如果出现如下错误:Interop type 'Microsoft.Office.Interop.Outlook.ApplicationClass' cannot be embedded. Use the applicable interface instead.
把DLL中的“Embed Interop Type”值置为“False”即可。