0

您好我正在开发 C# 应用程序,我正在尝试从 Outlook 收件箱中读取邮件。我正在使用 VS2010 和 MS-Office 2007,我在 Visual Studio 中添加了引用,该应用程序在我的系统中运行良好,但是当我在客户端系统中运行相同的应用程序时,它会抛出 COM 异常,

异常信息是这样的

无法将 System_ComObject 类型的 COM 对象转换为 InterfaceType "Microsoft.Office.Interop.Outlook.MailItem" 。此操作失败,因为 ID 为“{00063034-0000-0000-C000-00000000046} 的接口的 Com 组件上的 QueryInterface 调用由于以下错误而失败。不支持此类接口(HRESULT 异常:0x80004002)(E_NONINTERFACE)

我在尝试访问MailItem ex 代码时遇到异常: subject = ((Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items[i]).Subject; 我在安装了VS2010的3到4个系统中进行了测试,其抛出异常的客户端系统中不包含vs2010,但客户端系统中安装了.net 4.0 framework,ms-office 2007。

可能是什么错误?任何建议请..提前谢谢..

4

1 回答 1

0

这里有两个错误 - 并非收件箱中的所有项目都是 MailItem 类型,其次主题可以为空;所以正确的代码应该是这样的:

  using Microsoft.Office.Interop.Outlook;

  var myApp = new Application();
  NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");
  MAPIFolder myInbox = mapiNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
  mapiNameSpace.SendAndReceive(false);
  if (myInbox.Items.Count > 0) {
    for (var i = 1; i < myInbox.Items.Count; i++) {
      string subject;
      var mailItem = myInbox.Items[i] as MailItem;
      if (mailItem != null) {
        subject = mailItem.Subject;
        if (!string.IsNullOrEmpty(subject)) {
          subject = subject.Replace('\'', '\"');
        }
      }
    }
  }

最重要的线在哪里

  var mailItem = myInbox.Items[i] as MailItem;
  if (mailItem != null) {
     ...

  if (!string.IsNullOrEmpty(subject)) {
     ...
于 2013-11-11T12:35:07.673 回答