0

こんにちは、Outlook の受信トレイからメールを読もうとしている C# アプリケーションに取り組んでいます。私は VS2010 と MS-Office 2007 を使用しています。ビジュアル スタジオに参照を追加しました。アプリケーションはシステムで正常に動作していますが、クライアント システムで同じアプリケーションを実行すると、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フレームワーク、ms-office 2007がクライアントシステムにインストールされています。

エラーは何ですか?どんな提案でも..よろしくお願いします..

4

1 に答える 1

0

ここには 2 つのエラーがあります。Inbox 内のすべてのアイテムが 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 に答える