在Outlook中将邮件状态更改为已读

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

我已经删除了你标题中的标签,请参考:http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles - MUG4N
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开发的一般规则之一是您需要释放所有COM对象,否则可能会出现奇怪的行为(在关闭Outlook应用程序时保存弹出窗口,甚至Outlook永远不会关闭等)。
编辑: 我建议您确实使用Restrict方法仅获取未读邮件,因为我上面的代码片段将循环遍历所有电子邮件,这可能是不必要且不高效的。

这个好像不起作用。我加了代码Marshal.ReleaseCOMObject,但似乎没有任何作用。在我的Outlook邮件中,它仍然显示未读邮件。 - Newton Sheikh
即使重新启动Outlook(只是为了知道是否是刷新问题),仍然存在此问题。也许尝试修改另一个属性(例如mail.Subject = mail.Subject)以强制Outlook将电子邮件标记为脏邮件,这样当您调用mail.Save时它就会保存。 - Fabske
这对我有用。我的代码略有不同,因为我正在处理“无法转换COM对象”的问题,但主要概念是相同的。谢谢。 - Shahriar Rahman Zahin

0
将OutLook.MailItem的UnRead属性设置为false。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接