COM オブジェクトをキャストできません - Microsoft Outlook および C# 質問する

COM オブジェクトをキャストできません - Microsoft Outlook および C# 質問する

Outlook のメールボックス内の未読アイテムを表示するためにこのコードを作成しました。コードは次のとおりです。

 Microsoft.Office.Interop.Outlook.Application app;
 Microsoft.Office.Interop.Outlook.Items items; 
 Microsoft.Office.Interop.Outlook.NameSpace ns; 
 Microsoft.Office.Interop.Outlook.MAPIFolder inbox;

 Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application();
        app = application;
        ns =  application.Session;
        inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
        items = inbox.Items;
        foreach (Microsoft.Office.Interop.Outlook.MailItem mail in items)
        {
            if (mail.UnRead == true)
            {
                MessageBox.Show(mail.Subject.ToString());
            }
        }

しかし、foreach ループでは次のエラーが発生します:

「'System.__ComObject' 型の COM オブジェクトをインターフェイス タイプ 'Microsoft.Office.Interop.Outlook.MailItem' にキャストできません。この操作は、IID '{00063034-0000-0000-C000-0000000000046}' のインターフェイスの COM コンポーネントに対する QueryInterface 呼び出しが次のエラーにより失敗したため失敗しました: このようなインターフェイスはサポートされていません (HRESULT からの例外: 0x80004002 (E_NOINTERFACE))。」

このエラーを解決する方法を教えていただけますか?

ベストアンサー1

少し前に、あなたの問題のようなことを回避する必要がありました。

        foreach (Object _obj in _explorer.CurrentFolder.Items)
        {
            if (_obj is MailItem)
            {
                 MyMailHandler((MailItem)_obj);
            }
        }

お役に立てれば幸いです。

ここでの問題は、には(がそのうちの 1 つ)_explorer.CurrentFolder.Itemsだけではなく、より多くのオブジェクトを含めることができるということです。MailItemPostItem

おすすめ記事