我很好奇.NET是否可以实现。我写了一个小的C#Windows GUI应用程序,我想知道是否有任何方法可以“利用”Microsoft Outlook 2010并检查它是否有任何新的(未打开的)电子邮件存在?通常情况下,系统托盘上会出现信封图标表示这种情况:
答案 0 :(得分:1)
希望这会有所帮助......
以下主要介绍如何使用.NET从Outlook文件夹中的项目(在“收件箱”文件夹下称为“MySubFolderName”)中检索数据:
首先添加对项目的Outlook COM对象的引用:
在VS.NET中右键单击“引用”,然后选择“添加引用”。 选择COM选项卡 选择“Microsoft Outlook 11.0对象库”(这适用于MS Office 2003 - 我认为10.0适用于Office XP)并单击“选择”。 单击确定。 请注意,您可以访问任何Outlook / Exchange对象类型,例如约会,备注,任务,电子邮件等 - 只需使用智能感知来选择哪一个(例如Microsoft.Office.Interop.Outlook .... - 请参阅名为'item的变量的定义'下面)。
以下是代码:
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.PostItem item = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;
try
{
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
ns.Logon(null,null,false, false);
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
subFolder = inboxFolder.Folders["MySubFolderName"]; //folder.Folders[1]; also works
Console.WriteLine("Folder Name: {0}, EntryId: {1}", subFolder.Name, subFolder.EntryID);
Console.WriteLine("Num Items: {0}", subFolder.Items.Count.ToString());
for(int i=1;i<=subFolder.Items.Count;i++)
{
item = (Microsoft.Office.Interop.Outlook.PostItem)subFolder.Items[i];
Console.WriteLine("Item: {0}", i.ToString());
Console.WriteLine("Subject: {0}", item.Subject);
Console.WriteLine("Sent: {0} {1}", item.SentOn.ToLongDateString(), item.SentOn.ToLongTimeString());
Console.WriteLine("Categories: {0}", item.Categories);
Console.WriteLine("Body: {0}", item.Body);
Console.WriteLine("HTMLBody: {0}", item.HTMLBody);
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
ns = null;
app = null;
inboxFolder = null;
}
来源@ http://geekswithblogs.net/TimH/archive/2006/05/26/79720.aspx。
同时检查:
http://msdn.microsoft.com/en-us/library/bb610835(v=office.14).aspx