无法标记使用InterIMAP读取的电子邮件,文件夹是只读的

时间:2010-03-22 11:55:05

标签: c# email imap interimap

我正在尝试用InterIMAP标记电子邮件阅读(/ SEEN),但这不起作用。我通过调试器逐步完成代码,发现邮件服务器的响应是“IMAP0078 OK存储被忽略的只读邮箱。”,这几乎告诉我为什么它不起作用。但看起来没有办法告诉InterIMAP以读写方式打开连接。如果我使用类似Thunderbird的东西,我可以将消息设置为读取。

有谁知道我应该如何使用InterIMAP来实现我正在尝试的内容,或者如何更改源代码以便我能够将消息标记为已读?

2 个答案:

答案 0 :(得分:0)

我能够通过对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();
    }

不确定这是否是解决问题的最简洁方法,但它总比没有好。

答案 1 :(得分:0)

Seguecódigoajustadoque funcionou para remover a 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--;
        }
    }