0

コンソール アプリケーションで以下のコードを実行すると、正確な結果が得られますが、Windows フォームで実行すると、Outlook.Application app = new Outlook.Application(); で COM 例外がスローされます。

例外は、「CLSID {0006F03A-0000-0000-C000-000000000046} のコンポーネントの COM クラス ファクトリの取得に失敗しました: 80080005 サーバーの実行に失敗しました (HRESULT からの例外: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))」です。

 if (comboBoxFolder.SelectedIndex == 0)
        {
            setInboxView();

                Outlook.Application app = new Outlook.Application();
                Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
                Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

                foreach (Outlook.MailItem item in emailFolder.Items)
                {
                    mails[0] = item.SenderEmailAddress;
                    mails[1] = item.To;
                    mails[2] = item.Subject;
                    mails[3] = Convert.ToString(item.ReceivedTime);

                }
4

1 に答える 1

0

Outlook.Application のインスタンスを Private. の外に作成することで解決策を見つけました。その例外を削除します

string[] mails = new string[4];
    ListViewItem itm;
    Private Outlook.Application app = new Outlook.Application();

    private void comboBoxFolder_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBoxFolder.SelectedIndex == 0)
        {

                Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
                Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

                foreach (Outlook.MailItem item in emailFolder.Items)
                {
                    mails[0] = item.SenderEmailAddress;
                    mails[1] = item.To;
                    mails[2] = item.Subject;
                    mails[3] = Convert.ToString(item.ReceivedTime);

                    itm = new ListViewItem(mails);
                    listViewEmail.Items.Add(itm);

                }



        }
    }
于 2013-08-24T10:24:09.657 に答える