Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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# 无法通过IMAP删除或移动邮件_C#_Asp.net_C# 4.0_Imap - Fatal编程技术网

C# 无法通过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"

我试图使用IMAP功能将邮件移动到邮箱中的另一个文件夹中。问题是,尽管邮件已移动到目标文件夹中,但未从收件箱中删除

我在删除邮件时也遇到问题。在这种情况下,我发现消息的状态只是从未看到的更改为已看到的

以下是我尝试过的:

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,使用“删除”或“移动”,只是将邮件传输到另一个文件夹,而不是从“收件箱”中删除或移动。