【问题标题】:Unable to delete or move a message via IMAP无法通过 IMAP 删除或移动邮件
【发布时间】:2014-03-09 20:03:19
【问题描述】:

我正在尝试使用ae.net.mail.IMAP 功能将邮件移动到邮箱中的另一个文件夹,但问题是虽然邮件被移动到目标文件夹,它没有从收件箱中删除。

我也遇到了删除消息的问题。在这种情况下,我发现消息的状态只是从 unseen 变为 seen

这是我尝试过的:

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");
}   

【问题讨论】:

    标签: c# asp.net c#-4.0 imap


    【解决方案1】:

    标准的 IMAP 协议没有 MOVE 命令(但有一个添加它的扩展)。因此,根据您的 IMAP 服务器,客户端可能需要将 MOVE 实现为 UID COPY + UID STORE +FLAGS.SILENT (\Deleted) + UID EXPUNGE,但前提是服务器支持 UIDPLUS 扩展。如果服务器也不支持 UIDPLUS,那么基本上不可能正确实现。你所能做的就是COPY + STORE +FLAGS.SILENT (\Deleted) 但不能做EXPUNGE 因为没有办法限制将被删除的消息(我想你可以取消标记任何其他已删除的消息,然后删除,然后重新标记它们作为\已删除,但这开始变得有风险)。

    这可以解释为什么邮件可能仍然存在于收件箱中(尽管它们至少应该被标记为已删除)。

    不确定为什么将邮件标记为已删除会将其标记为已查看。这似乎是 AE.NET.Mail 中的一个错误。

    【讨论】:

    • 项目网站上报告了一个bug,github.com/andyedinborough/aenetmail/issues/7
    • @jstedfast。还有一件有趣的事情正在发生。我将消息的标志设置为已删除,你猜怎么着,它将状态从可见变为不可见。一定是 ae.net.mail 内部发生了一些真正的魔法
    • 看起来 AE.NET.Mail 不处理对其发送的命令的未标记响应:-\
    • @THunter:是的,我可能会推荐使用我的 IMAP 库:github.com/jstedfast/MailKit 它仍在开发中,但它的质量比 AE.NET.Mail 更好。不过,我计划使 API 异步,因此请注意。
    • @jstedfast 我正在使用 s22.imap 使用删除或移动只是将邮件传输到另一个文件夹,但不会从收件箱中删除或移动。
    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多