none
UnreadItems não ficam unread RRS feed

  • Pergunta

  • Boa, tenho este código:

                    foreach (Object obj in unreadItems)
                    {
                        if (!(obj is Outlook.MailItem)) continue;
                        Outlook.MailItem item = (Outlook.MailItem) obj;
                        dt.Rows.Add(item.Subject, item.SenderName, item.HTMLBody,
                            item.SentOn.ToLongDateString() + " " + item.SentOn.ToLongTimeString());

                        item.UnRead = false;
                         item.Save();
                         System.Runtime.InteropServices.Marshal.ReleaseComObject(item);
                    }

    em caso de ser até 3 mails ele funciona bem se for mais ele não os coloca todos como unread alguma coisa errada?


    António Silva

    segunda-feira, 7 de março de 2016 10:01

Respostas

  • Boa tarde Cesar,

    Eu tenho algumas documentações que podem lhe ser úteis.

    E para facilitar ainda mais, segue um código que tenho, já testado e funcionando.

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


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    • Editado Roberto AB Filho terça-feira, 15 de março de 2016 16:26
    • Sugerido como Resposta Antero Marques terça-feira, 15 de março de 2016 17:56
    • Marcado como Resposta Marcos SJ terça-feira, 15 de março de 2016 20:01
    terça-feira, 15 de março de 2016 16:26

Todas as Respostas

  • Talvez colocar como true?

    item.UnRead = true;

    segunda-feira, 7 de março de 2016 10:39
  • Mas assim vai ficar como não lido novamente certo?


    António Silva

    segunda-feira, 7 de março de 2016 10:46
  • UnRead é uma função que realmente esta executar mas só faz 3 de cada vez e depois so faz um a um o que é estranho


    António Silva


    • Editado Backslashup segunda-feira, 7 de março de 2016 10:56
    segunda-feira, 7 de março de 2016 10:47
  • Tenta isso:

    int i = 1;
    foreach (Object obj in unreadItems)
    {
        if (!(obj is Outlook.MailItem)) continue;
        Outlook.MailItem item = (Outlook.MailItem)obj;
        dt.Rows.Add(item.Subject, item.SenderName, item.HTMLBody,
            item.SentOn.ToLongDateString() + " " + item.SentOn.ToLongTimeString());
    
        item.UnRead = false;
        item.Save();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(item);
        if (i++ % 3 == 0)
        {
            Thread.Sleep(100);
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }

    segunda-feira, 7 de março de 2016 11:19
  • Não esta funcionar, alias agora so me lista 3 emails por ler e tenho bem mais


    António Silva

    segunda-feira, 7 de março de 2016 11:25
  • Boa tarde Cesar,

    Eu tenho algumas documentações que podem lhe ser úteis.

    E para facilitar ainda mais, segue um código que tenho, já testado e funcionando.

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


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    • Editado Roberto AB Filho terça-feira, 15 de março de 2016 16:26
    • Sugerido como Resposta Antero Marques terça-feira, 15 de março de 2016 17:56
    • Marcado como Resposta Marcos SJ terça-feira, 15 de março de 2016 20:01
    terça-feira, 15 de março de 2016 16:26