将outlook中的邮件状态更改为已读

本文关键字:状态 outlook | 更新日期: 2023-09-27 18:12:54

我编写了一段代码,将读取Outlook 2010中所有未读邮件并将其写入文件。之后,我想把邮件的状态更改为outlook中的已读。

我该怎么做?

我使用互操作访问邮件。

        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");

将outlook中的邮件状态更改为已读

这里有一些链接可以帮助你:

  • http://msdn.microsoft.com/en-us/library/aa289167%28VS.71%29.aspx(这是Outlook 2003,但它仍然包含非常有用的信息)
  • http://msdn.microsoft.com/en-us/library/ms268731%28VS.80%29.aspx

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

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开发的一般规则是你需要释放所有com对象,否则你会有奇怪的行为(关闭outlook应用程序时弹出保存窗口,甚至outlook永远不会关闭等)

编辑:我建议您确实使用Restrict方法来获取未删除的邮件,因为上面的代码片段将在所有邮件中循环,这可能是不必要的,而且不性能。

设置OutLook。MailItem的UnRead属性为false