我正在尝试用InterIMAP标记电子邮件阅读(/ SEEN),但这不起作用。我通过调试器逐步完成代码,发现邮件服务器的响应是“IMAP0078 OK存储被忽略的只读邮箱。”,这几乎告诉我为什么它不起作用。但看起来没有办法告诉InterIMAP以读写方式打开连接。如果我使用类似Thunderbird的东西,我可以将消息设置为读取。
有谁知道我应该如何使用InterIMAP来实现我正在尝试的内容,或者如何更改源代码以便我能够将消息标记为已读?
答案 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--;
}
}