我正在尝试使用 InterIMAP 将电子邮件标记为已读 (/SEEN),但这不起作用。我用调试器单步执行了代码,发现邮件服务器的响应是“IMAP0078 OK Store 被只读邮箱忽略。”,这几乎告诉了我为什么它不起作用。但看起来没有办法告诉 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 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--;
}
}