C# 无法通过IMAP删除或移动邮件
我试图使用IMAP功能将邮件移动到邮箱中的另一个文件夹中。问题是,尽管邮件已移动到目标文件夹中,但未从收件箱中删除 我在删除邮件时也遇到问题。在这种情况下,我发现消息的状态只是从未看到的更改为已看到的 以下是我尝试过的:C# 无法通过IMAP删除或移动邮件,c#,asp.net,c#-4.0,imap,C#,Asp.net,C# 4.0,Imap,我试图使用IMAP功能将邮件移动到邮箱中的另一个文件夹中。问题是,尽管邮件已移动到目标文件夹中,但未从收件箱中删除 我在删除邮件时也遇到问题。在这种情况下,我发现消息的状态只是从未看到的更改为已看到的 以下是我尝试过的: using (ImapClient ic = new ImapClient( host, email, password, ImapClient.AuthMethods.Login, 993, true)) { ic.SelectMailbox("INBOX"
using (ImapClient ic = new ImapClient(
host, email, password, ImapClient.AuthMethods.Login, 993, true))
{
ic.SelectMailbox("INBOX");
string[] uids = ic.Search(SearchCondition.From("someone@gmail.com"));
MailMessage[] messages =
ic.GetMessages(uids[0], uids[uids.Length - 1], false);
ic.MoveMessage(uids[0], "Junk");
}
标准IMAP协议没有MOVE命令(但有一个扩展添加了该命令)。因此,根据IMAP服务器的不同,客户端可能需要将
MOVE
实现为UID COPY
+UID STORE+FLAGS.SILENT(\Deleted)
+UID EXPUNGE
,但前提是服务器支持UIDPLUS扩展。如果服务器也不支持UIDPLUS,那么基本上就不可能正确实现。您所能做的就是COPY
+STORE+FLAGS.SILENT(\Deleted)
,但无法执行EXPUNGE
,因为无法限制将被删除的邮件(我想您可以取消标记任何其他已删除邮件,然后将其删除,然后将其重新标记为\Deleted,但这开始变得有风险)
这可以解释为什么这些邮件可能仍然存在于收件箱中(尽管它们至少应该标记为已删除)
不确定为什么将邮件标记为已删除就是将其标记为已看到。这看起来像是AE.NET.Mail中的一个bug。项目站点@jstedfast上报告了一个bug。还有一件有趣的事情正在发生。我正在将消息的标志设置为“已删除”,猜猜看,它会将状态从“已看到”更改为“未看到”。ae.net.Mail内部一定有一些真正的魔力看起来ae.net.Mail无法处理对它发送的命令的未标记响应:-\@THunter:是的,我可能建议使用我的IMAP库:它仍在开发中,但质量比ae.net.Mail好。不过,我计划使API异步,所以请注意。@jstedfast我使用的是s22.imap,使用“删除”或“移动”,只是将邮件传输到另一个文件夹,而不是从“收件箱”中删除或移动。