【发布时间】:2011-08-13 20:06:36
【问题描述】:
我们刚刚启动了一项新任务,使用 asp.net Web 应用程序从交换服务器检索不同帐户的电子邮件。我过去没有这样的经验,但是在网上搜索后我发现了一个可以与outlook通信并从那里获取电子邮件的代码sn-p。但是,每次我测试代码时都会发生异常:
"无法转换 COM 类型的对象 'System.__ComObject' 到接口类型 'Microsoft.Office.Interop.Outlook.PostItem'。 此操作失败,因为 COM 上的 QueryInterface 调用 带有 IID 的接口组件 '{00063024-0000-0000-C000-000000000046}' 由于以下错误而失败:否 支持此类接口(异常 从 HRESULT:0x80004002 (E_NOINTERFACE))。 "
有人知道原因吗?
顺便说一句,非常感谢任何有助于直接从 Exchange 服务器获取电子邮件的建议!
我的代码:
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("user", "password", false, false);
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Folder Name:{0},EntryId:{1}", inboxFolder.Name, inboxFolder.EntryID);
sb.AppendFormat(" Num Items:{0}", inboxFolder.Items.Count.ToString());
Response.Write(sb);
for (int i = 1; i <= inboxFolder.Items.Count; i++)
{
item = (Microsoft.Office.Interop.Outlook.PostItem)inboxFolder.Items[i];//this is the exception happened line
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 (Exception)
{
throw;
}
finally
{
ns = null;
app = null;
inboxFolder = null;
}
【问题讨论】:
-
您必须使用互操作,还是可以像大多数使用 POP 从邮件服务器检索消息的应用程序一样使用互操作?
-
@Eariz,没必要,但我需要一种从 Exchange 服务器检索电子邮件的方法。
-
@Mike,很高兴知道,我会读的。谢谢。
标签: c# asp.net outlook exchange-server