【问题标题】:MailKit Delete single message from gmailMailKit 从 gmail 中删除单个消息
【发布时间】:2014-05-15 11:54:16
【问题描述】:

我正在使用 MailKit (https://github.com/jstedfast/MailKit) 通过 imap 连接到谷歌应用程序,但是我如何删除一条消息? (我可以将其移至垃圾箱,只需将其从收件箱中取出即可。

到目前为止,我已经连接、下载、解析消息正文中的链接。我只需要这最后一个动作来获得我需要的东西。

谢谢!

【问题讨论】:

  • 虽然您只需要下载一封邮件,但我有一个完整的 MailKit 示例,可以删除大量邮件 here。删除一条消息也是类似的。

标签: c# gmail


【解决方案1】:

要从 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?在消息对象上找不到那些。
  • for (int index = 0; index < folder.Count; index++) ... 是一个索引。如果您请求MessageSummaryItems.UniqueId,则可以从folder.Search() 查询或folder.Fetch() 获取UID。
  • 谢谢,但是那个索引有多稳定?当新消息到达或消息被删除(在我的会话或其他会话中)时,索引会改变吗?想着foreach修改迭代集合后怎么失效了。
  • 你需要 uid 因为删除消息会改变消息的索引,很明显。
  • 因为听起来您正在下载所有邮件,就好像 IMAP 服务器是 POP3 服务器一样,您可以这样做:var uids = folder.Search (SearchQuery.All); foreach (var uid in uids) message = folder.GetMessage(uid);
猜你喜欢
  • 2021-01-19
  • 2015-07-20
  • 2010-10-02
  • 1970-01-01
  • 2019-04-18
  • 2021-06-12
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多