Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t使用InterIMAP标记电子邮件已读,文件夹为只读_C#_Email_Imap_Interimap - Fatal编程技术网

C# Can';t使用InterIMAP标记电子邮件已读,文件夹为只读

C# Can';t使用InterIMAP标记电子邮件已读,文件夹为只读,c#,email,imap,interimap,C#,Email,Imap,Interimap,我正在尝试用InterIMAP标记电子邮件已读(/已看到),但这不起作用。我使用调试器仔细检查了代码,发现邮件服务器的响应是“IMAP0078 OK Store ignored with read-only mailbox.”,这基本上告诉了我为什么它不起作用。但似乎无法告诉InterIMAP以读写方式打开连接。如果我使用诸如Thunderbird之类的工具,我可以将消息设置为已读 有人知道我应该如何使用InterIMAP来实现我正在尝试的目标,或者如何更改源代码以便我能够将消息标记为已读吗?我

我正在尝试用InterIMAP标记电子邮件已读(/已看到),但这不起作用。我使用调试器仔细检查了代码,发现邮件服务器的响应是“IMAP0078 OK Store ignored with read-only mailbox.”,这基本上告诉了我为什么它不起作用。但似乎无法告诉InterIMAP以读写方式打开连接。如果我使用诸如Thunderbird之类的工具,我可以将消息设置为已读


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

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

不确定这是否是解决我的问题的最干净的方法,但总比什么都没有好。

Segue código ajustado que functionou para remover a mensage 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--;
        }
    }

问题的原因似乎是邮箱(=文件夹)是使用“检查”命令而不是“选择”命令打开的。这些IMAP命令非常相似-主要区别在于“检查”以只读模式打开文件夹。我不熟悉InterIMAP,但如果您能够在调用MarkMessagesRead方法之前使用“SELECT”而不是“Inspect”,则不再需要此修复程序。欢迎使用StackOverflow!大多数SO用户普遍使用和理解的语言是英语。所以,请尝试用英语解释你的答案,让它对非西班牙语(?)用户也有用。