C# Can';t使用InterIMAP标记电子邮件已读,文件夹为只读
我正在尝试用InterIMAP标记电子邮件已读(/已看到),但这不起作用。我使用调试器仔细检查了代码,发现邮件服务器的响应是“IMAP0078 OK Store ignored with read-only mailbox.”,这基本上告诉了我为什么它不起作用。但似乎无法告诉InterIMAP以读写方式打开连接。如果我使用诸如Thunderbird之类的工具,我可以将消息设置为已读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来实现我正在尝试的目标,或者如何更改源代码以便我能够将消息标记为已读吗?我能够通过以下对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用户普遍使用和理解的语言是英语。所以,请尝试用英语解释你的答案,让它对非西班牙语(?)用户也有用。