【问题标题】:error reading oulook using MAPI in ASP.NET在 ASP.NET 中使用 MAPI 读取 oulook 时出错
【发布时间】:2012-06-14 11:00:16
【问题描述】:

我使用 VS2010、C#、ASP.NET 来阅读 Outlook 电子邮件。我已经用我的 gmail (IMAP) 设置了 Outlook Express 6,我在第一行遇到了一个奇怪的异常,我的 COM 对象正在这里创建,这是我的代码:

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("gmail_id", "gmail_pass", false, true);

    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)
{

}
finally
{
    ns = null;
    app = null;
    inboxFolder = null;
}

这是我的例外:

Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

这个异常是在第一行创建的:

app = new Microsoft.Office.Interop.Outlook.Application();

我使用Microsoft.Office.Interop.Outlook.dll 文件作为我的互操作参考,这里出了什么问题?我可以在 Outlook Express 6 中阅读我的 Gmail 收件箱,但在我的 ASP.NET 网络应用程序中没有运气

【问题讨论】:

    标签: asp.net outlook imap mapi


    【解决方案1】:

    尝试配置 appropriate COM Activation permissions 以使 Office 应用程序在 ASP.NET 下运行。

    【讨论】:

    • 感谢亲爱的 SilverNinja,我测试了它,但是应该为每个用户执行此过程吗?实际上我正在尝试编写一个可以由我的 Silverlight 应用程序访问的 WCF,它将用于阅读电子邮件,目前我直接阅读 IMAP,但也应该添加 Outlook,我应该在哪里更改这些设置?只在我的服务器上?
    • 这只会在服务器上为运行应用程序池的任何帐户完成。对于 IIS 6,它将是 IIS_IUSRS,但对于 IIS 7,它需要在应用程序池设置中进行配置。
    【解决方案2】:

    首先,您永远不应该在服务(例如 IIS)中使用任何 Office 应用程序(包括 Outlook)。没有例外,它根本不受支持。 其次,如果您使用的是 Outlook 对象模型(不在服务中),则需要安装 Outlook(真正的)。 OE 与 Outlook 2010/2007/2003/等没有任何共同之处,除了名称中的“Outlook”一词。

    【讨论】:

    • 好的,但是如何在我的服务器应用程序中使用 Outlook 服务?还有什么其他选择?
    • 您可以使用扩展 MAPI(C++ 或 Delphi)或 Redemption (dimastr.com/redemption),它公开了可在服务中使用的 RDO 对象系列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2021-11-08
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多