将邮件状态更改为"读入Outlook"

New*_*ikh 3 c# outlook office-interop outlook-2010

我编写了一个代码,可以从Outlook 2010中读取所有未读邮件并将其写入文件中.之后我想改变邮件的状态为Read in 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");
Run Code Online (Sandbox Code Playgroud)

Fab*_*ske 7

以下是一些可以帮助您的链接:

我有一个可以帮助您的代码示例:

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
Run Code Online (Sandbox Code Playgroud)

请注意我没有测试它是否有效甚至编译.
关于outlook dev的一般规则是你需要释放所有com对象,否则你可能会有奇怪的行为(关闭outlook app时保存弹出窗口,甚至看不到前景等等)

编辑:我建议你确实使用Restrict方法只获得unred邮件,因为我上面的代码片段将循环所有电子邮件,这可能是不必要的,而不是高性能.