【问题标题】:How to delete messages in Gmail (not move to Trash folder) using MailKit如何使用 MailKit 删除 Gmail 中的邮件(不移动到垃圾箱)
【发布时间】:2014-06-07 21:35:43
【问题描述】:

我正在尝试使用 MailKit 库开发 ImapClient。

我如何永久从 Gmail 帐户中删除邮件,而不是简单地将它们移动到垃圾箱文件夹?

【问题讨论】:

    标签: c# gmail imap gmail-imap mailkit


    【解决方案1】:

    在大多数 IMAP 服务器上,您可以这样做:

    folder.AddFlags (uids, MessageFlags.Deleted, true);
    

    这会在消息上设置\Deleted 标志。下一步是:

    folder.Expunge (uids);
    

    这将从文件夹中清除邮件。

    假设这在 GMail 上不起作用,可能是因为一旦您将 \Deleted 标志添加到 GMail IMAP 服务器上的邮件,它就会将其移动到垃圾箱文件夹(这超出了 IMAP 客户端的控制) .

    这是一个可行的想法,但是......

    // First, get the globally unique message id(s) for the message(s).
    var summaries = folder.Fetch (uids, MessageSummaryItems.GMailMessageId);
    
    // Next, mark them for deletion...
    folder.AddFlags (uids, MessageFlags.Deleted, true);
    
    // At this point, the messages have been moved to the Trash folder.
    // So open the Trash folder...
    folder = client.GetFolder (SpecialFolder.Trash);
    folder.Open (FolderAccess.ReadWrite);
    
    // Build a search query for the messages that we just deleted...
    SearchQuery query = null;
    foreach (var message in summaries) {
        var id = SearchQuery.GMailMessageId (message.GMailMessageId);
        query = query != null ? query.Or (id) : id;
    }
    
    // Search the Trash folder for these messages...
    var matches = folder.Search (query);
    
    // Not sure if you need to mark them for deletion again...
    folder.AddFlags (matches, MessageFlags.Deleted, true);
    
    // Now purge them from the Trash folder...
    folder.Expunge (matches);
    

    你已经完成了......

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2014-06-18
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      相关资源
      最近更新 更多