Изменить статус почты на «Прочитано» в Outlook

Я написал код, который будет читать все непрочитанные письма из 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");

person Newton Sheikh    schedule 09.05.2013    source источник
comment
Я удалил тег в вашем заголовке, см.: meta.stackexchange.com/questions/19190/   -  person MUG4N    schedule 09.05.2013


Ответы (2)


Вот несколько ссылок, которые могут вам помочь:

У меня есть пример кода, который может вам помочь:

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 или даже прогноз никогда не закрывается и т. д.)

РЕДАКТИРОВАТЬ: Я бы посоветовал вам действительно использовать метод Restrict для получения только неотправленной почты, потому что мой фрагмент выше будет зацикливаться на всех электронных письмах, которые могут быть ненужными и неэффективными.

person Fabske    schedule 09.05.2013
comment
Это не работает. Я добавил код Marshal.ReleaseCOMObject, но они, похоже, ничего не делают. В моих сообщениях Outlook по-прежнему отображаются письма как непрочитанные. - person Newton Sheikh; 10.05.2013
comment
даже после перезапуска Outlook (просто чтобы узнать, не проблема ли это с обновлением). Возможно, попробуйте изменить другое свойство (например, mail.Subject = mail.Subject, чтобы заставить Outlook помечать электронную почту как грязную, чтобы она сохранялась при вызове mail.Save). - person Fabske; 10.05.2013
comment
Это сработало для меня. Мой код немного отличается, потому что я решаю проблему с невозможностью приведения COM-объекта, но основная концепция та же. Спасибо - person Shahriar Rahman Zahin; 16.01.2020

Задайте для свойства OutLook.MailItem UnRead значение false

person dmn    schedule 15.02.2014