将邮件状态更改为“读入Outlook”

时间:2013-05-09 09:25:49

标签: 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");

2 个答案:

答案 0 :(得分:5)

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

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

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 app时保存弹出窗口,甚至不会关闭outlook等等。)

编辑: 我建议你确实使用Restrict方法只获取未经邮寄的邮件,因为我上面的代码片段将循环播放所有可能不必要且不具备效果的电子邮件。

答案 1 :(得分:0)

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