MailKit如何从Gmail中删除单个邮件

15
我正在使用MailKit (https://github.com/jstedfast/MailKit )通过imap连接到Google应用,如何删除单个消息?(将其移动到垃圾箱也可以,只需将其从收件箱中删除即可。)
到目前为止,我已经连接,下载并解析消息正文中的链接。我只需要这最后一个操作就可以得到我需要的东西。
谢谢!

虽然您只需要下载一条消息,但我在这里提供了一个完全可用的MailKit示例,可以删除批量消息此处。删除单个消息类似。 - Arthur Silva
1个回答

29

要从IMAP服务器上的文件夹中删除邮件,您只需要执行以下操作:

client.Inbox.AddFlags (new int[] { index }, MessageFlags.Deleted);
或者
client.Inbox.AddFlags (new UniqueId[] { uid }, MessageFlags.Deleted);

现在服务器上的消息被标记为 \Deleted。

您可以通过调用以下方法来清除已删除项目的文件夹:

client.Inbox.Expunge ();

如果你正在使用UID代替索引,并且IMAP服务器支持UIDPLUS扩展(检查client.Capabilities),那么你可以像这样仅清除选定的一组邮件:

if (client.Capabilities.HasFlag (ImapCapabilities.UidPlus))
    client.Inbox.Expunge (new UniqueId[] { uid });

我在哪里可以获取那些索引或uid?在消息对象中找不到它们。 - ygoe
for (int index = 0; index < folder.Count; index++) ... 是一个索引。UID可以从 folder.Search() 查询或者如果您请求了 MessageSummaryItems.UniqueId,也可以从 folder.Fetch() 中获取。 - jstedfast
谢谢,但是这个索引有多稳定?当新消息到达或者消息被删除(在我的会话或其他会话中),索引会改变吗?我在考虑修改迭代集合后foreach的无效问题。 - ygoe
1
你需要uid,因为删除消息会改变消息的索引,这是显而易见的。 - jstedfast
1
由于听起来你像是把IMAP服务器当做POP3服务器下载所有邮件,你可以这样做:var uids = folder.Search(SearchQuery.All); foreach (var uid in uids) message = folder.GetMessage(uid); - jstedfast
我得到了“AddFlags不是iMailfolder的成员”的错误。看起来它是iMailfolderExtensions的成员,但我该如何获取该接口? - Brobic Vripiat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接