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

编辑:我建议您确实使用 Restrict 方法来仅获取未发送的邮件,因为我上面的代码段将循环播放所有可能不必要且无效的电子邮件。

于 2013-05-09T10:36:30.533 回答
0

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

于 2014-02-15T05:04:13.257 回答