使用c#从Outlook访问MailItem时出现异常

时间:2013-11-11 09:47:15

标签: c# .net outlook

您好我正在处理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])。主题; 我在安装了VS2010的3到4个系统中进行了测试,其中抛出异常的客户端系统中没有包含vs2010,但是.net 4.0框架,ms-office 2007安装在客户端系统中。

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

1 个答案:

答案 0 :(得分:0)

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

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