Не удается пометить письмо как прочитанное с помощью InterIMAP, папка доступна только для чтения - PullRequest
1 голос
/ 22 марта 2010

Я пытаюсь пометить прочитанные (/ SEEN) письма InterIMAP, но это не работает.Я прошел по коду с помощью отладчика и обнаружил, что ответ от почтового сервера: «IMAP0078 OK Store игнорируется с почтовым ящиком только для чтения», что в значительной степени говорит мне, почему он не работает.Но похоже, что нет никакого способа сказать InterIMAP открыть соединение как чтение-запись.Если я использую что-то вроде Thunderbird, я могу установить сообщения как прочитанные.

Кто-нибудь знает, как мне использовать InterIMAP, чтобы добиться того, что я пытаюсь, или как изменить исходный код, чтобы я могумеет помечать сообщения как прочитанные?

Ответы [ 2 ]

0 голосов
/ 23 марта 2016

Sego código ajustado que funcionou para remover mensagem da caixa IMAP GMAIL!

    public void DeleteMail(IMAPMessage msg)
    {
        msg.Folder.Select();
        string cmd = "UID STORE {0} +FLAGS (\\Deleted \\Seen)\r\n";
        ArrayList result = new ArrayList();
        SendAndReceive(String.Format(cmd, msg.Uid), ref result);

        int countResult = result.Count - 1;

        while (countResult >= 0)
        {
            if (result[countResult].ToString().ToLower().Contains("ok"))
            {
                msg.Flags.New = false;
                msg.Flags.Deleted = true;

                string cmd2 = "EXPUNGE\r\n";
                ArrayList result2 = new ArrayList();
                SendAndReceive(String.Format(cmd2, msg.Uid), ref result2);

                if (result2[0].ToString().ToLower().Contains("ok"))
                {
                    //Deu certo!!
                    msg.Folder.Examine();
                }

            }

            countResult--;
        }
    }
0 голосов
/ 22 марта 2010

Мне удалось исправить ситуацию с помощью следующего изменения в Imap.cs

public void MarkMessageAsRead(IMAPMessage msg)
{
    string cmd = "UID STORE {0} +FLAGS (\\Seen)\r\n";
    ArrayList result = new ArrayList();
    SendAndReceive(String.Format(cmd, msg.Uid), ref result);
    if (result[0].ToString().ToLower().Contains("ok"))
        msg.Flags.New = false;
}

Изменено на

 public void MarkMessageAsRead(IMAPMessage msg)
    {
        msg.Folder.Select();
        string cmd = "UID STORE {0} +FLAGS (\\Seen)\r\n";
        ArrayList result = new ArrayList();
        SendAndReceive(String.Format(cmd, msg.Uid), ref result);
        if (result[0].ToString().ToLower().Contains("ok"))
            msg.Flags.New = false;
        msg.Folder.Examine();
    }

Не уверен, что это самый чистый способ решения моей проблемы, но лучше, чем ничего.

...