首页 > 解决方案 > 如何可靠地从 gmail 中删除消息?[ActiveUp.Net.Mail]

问题描述

我写了一个程序来读取来自 gmail 的特定消息。阅读和分析后,我想删除它们。但是,我无法让它工作。我使用以下代码:

    /// <summary>
    /// Deletes a set of E-Mails by their messageID from a given mailbox
    /// </summary>
    /// <param name="messageIds">The IDs of the messages to delete</param>
    /// <param name="mailBox">The mailbox to delete the messages from</param>
    public void DeletMails(List<int> messageIds, string mailBox)
    {
        if (messageIds.Count<1)
        {
            return;
        }
        // get the mailbox
        Mailbox mails = Client.SelectMailbox(mailBox);
        
        // create a collection of flags to set for the emails
        var flags = new FlagCollection();
        // set only the deleted flag
        flags.Add(new Flag("DELETED"));

        Logging.Log.Info($"Deleting {messageIds.Count} mails");
        // set the flag for each email in the messageIds
        try
        {
            foreach (var id in messageIds)
            {
                mails.DeleteMessage(id, true);
                mails.SetFlags(id, flags);
            }
        }
        catch (Exception ex)
        {
            Logging.Log.Error($"{ex.Message}:{ex.StackTrace}");
        }

        Logging.Log.Info($"Finished deleting {messageIds.Count} mails");

        Client.Expunge();
        Client.Disconnect();
    }

我知道代码中有一些重复项

然而。这没用。

当我登录我的 gmail 帐户时,我仍然可以看到电子邮件。只有改变:它们被标记为已读并且标签被从它们中移除。(例如:我使用 gmail 的过滤器设置将来自 service@paypal.de 的每封电子邮件标记为 PayPal,然后我从邮箱 PayPal 中获取所有电子邮件并记住它们的 ID 并删除它们。之后它们被标记为已读和它们不再具有 PayPal 标签,但不会从邮箱 PayPal 中删除。)

执行代码时没有抛出异常。

知道为什么吗?你推荐使用另一个 Mail-API 吗?我正在使用 ActiveUp.Net.Mail。

谢谢你的建议。

标签: c#wpfemailimap

解决方案


对于 GMail,您需要将它们移到垃圾箱 ( UID MOVE x "[Gmail/Trash]")。注意文件夹的本地化。

Gmail 认为 \Deleted 标志是从该邮件中删除标签,这意味着删除收件箱标签实际上与归档邮件相同。


推荐阅读