使用 IMAP 删除消息不会从 MailSystem.NET 中删除消息

Posted

技术标签:

【中文标题】使用 IMAP 删除消息不会从 MailSystem.NET 中删除消息【英文标题】:Using IMAP delete message isn't removing message from MailSystem.NET 【发布时间】:2011-12-29 17:26:57 【问题描述】:

我正在使用 MailSystem.NET 操作系统库来处理 IMAP。我的客户端程序有问题(用 c# 编写)。它使用 IMAP 库轮询邮件服务器。将消息添加到客户端数据库后,它将消息标记为已删除。但是,我不一定要物理删除该电子邮件,因为其他客户将无法阅读该电子邮件。

所以我调用 DeleteMessage(1, false),它应该将电子邮件标记为已删除,但由于 'expunge' 设置为 false,因此它不会从服务器中物理删除。

如果我打开 Thunderbird(不同的客户端)并连接到邮箱,果然消息已经消失了。但是,我的另一个客户认为该消息仍然存在。邮件计数显示 1. 我如何确保当我从“收件箱”邮件文件夹返回邮件计数时,它只返回那些未标记为删除的邮件,即那些尚未被客户端程序读取的邮件?

【问题讨论】:

这取决于邮件客户端,您无能为力。选择命令 EXISTS 响应始终返回邮箱中的邮件数(不检查任何邮件标志)。 我如何获取收件箱中未设置“已删除”标志的电子邮件的消息计数? 可能最快的方法是使用 IMAP 搜索。您可以搜索“未删除”消息。 UNDELETED 搜索键 - 未设置 \Deleted 标志的邮件。在 RFC 3501 6.4.4 中定义。 【参考方案1】:

正如 Ivar 在他的评论中提到的,您可以使用 UNDELETED 来搜索邮箱中的邮件。但是,我发现“未删除”搜索标志在我一直使用的 IMAP 库上工作得更好。

【讨论】:

以上是关于使用 IMAP 删除消息不会从 MailSystem.NET 中删除消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 IMAP 获取邮件,获取已删除的邮件

对于使用javamail处理的一个Office365邮箱,folder.close(true)不会清除已删除的电子邮件

将消息从一个 IMAP 服务器移动到另一个的脚本

Imap消息编码问题

IMAP 文件夹/消息同步策略?

MailCore 如何删除邮件