5

Outlook 2010 からすべての未読メールを読み取り、それらをファイルに書き込むコードを作成しました。その後、メールのステータスを Outlook で既読に変更したいと考えています。

どうすればいいのですか?

メールへのアクセスに Interop を使用しています。

        Microsoft.Office.Interop.Outlook.Application app = null;
        Microsoft.Office.Interop.Outlook._NameSpace ns = null;
        Microsoft.Office.Interop.Outlook.MailItem item = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
        Microsoft.Office.Interop.Outlook.Items unreadItems = null;

        app = new Microsoft.Office.Interop.Outlook.Application();//.CreateItem(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

        ns = app.GetNamespace("MAPI");

        inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

        unreadItems = inboxFolder.Items.Restrict("[Unread]=true");
4

2 に答える 2

9

ここにあなたを助けることができるいくつかのリンクがあります:

私はあなたを助けることができるコードサンプルを持っています:

OutLook.Application oApp;
OutLook._NameSpace oNS;
OutLook.MAPIFolder oFolder;
OutLook._Explorer oExp;

oApp = new OutLook.Application();
oNS = (OutLook._NameSpace)oApp.GetNamespace("MAPI");
oFolder = oNS.GetDefaultFolder(OutLook.OlDefaultFolders.olFolderInbox);
oExp = oFolder.GetExplorer(false);
oNS.Logon(Missing.Value, Missing.Value, false, true);

OutLook.Items items = oFolder.Items;
foreach (OutLook.MailItem mail in items)
{
    if (mail.UnRead)
    {
        mail.UnRead = false;
        mail.Save();
    }
    Marshal.ReleaseCOMObject(mail);
}
Marshal.ReleaseCOMObject(items);

// Dont forget to free all other object, using Marshal.ReleaseCOMObject then close oApp

動作するかどうか、またはコンパイルするかどうかはテストしていないことに注意してください。
Outlook dev の一般的なルールとして、すべての com オブジェクトを解放する必要があります。そうしないと、奇妙な動作が発生する可能性があります (Outlook アプリを閉じるときにポップアップを保存するか、Outlook を閉じないなど)。

編集: 上記のスニペットは、不要でパフォーマンスの低いすべてのメールでループするため、Restrict メソッドを使用して赤くないメールのみを取得することをお勧めします。

于 2013-05-09T10:36:30.533 に答える
0

OutLook.MailItem の UnRead プロパティを false に設定します

于 2014-02-15T05:04:13.257 に答える