Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何可靠地从gmail中删除邮件?[ActiveUp.Net.Mail]_C#_Wpf_Email_Imap - Fatal编程技术网

C# 如何可靠地从gmail中删除邮件?[ActiveUp.Net.Mail]

C# 如何可靠地从gmail中删除邮件?[ActiveUp.Net.Mail],c#,wpf,email,imap,C#,Wpf,Email,Imap,我写了一个程序,从gmail中读取特定的信息。在阅读和分析之后,我想删除它们。然而,我不能让它工作。我使用以下代码: /// <summary> /// Deletes a set of E-Mails by their messageID from a given mailbox /// </summary> /// <param name="messageIds">The IDs of the messa

我写了一个程序,从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();
    }
//
///从给定邮箱中按邮件ID删除一组电子邮件
/// 
///要删除的邮件的ID
///要从中删除邮件的邮箱
公用无效deletMail(列出MessageID、字符串邮箱)
{

如果(messageIds.Count对于GMail,您需要将其移动到垃圾箱(
UID move x“[GMail/trash]”)
),请注意文件夹的本地化


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

好的,我终于找到了答案

@马克斯:IMAP设置可以(半)工作。但是,它有点烦人;) 如前所述,您必须:

  • 将“当我将IMAP中的邮件标记为已删除时”设置为“删除关闭”-等待客户端更新服务器。'
  • 将“邮件标记为已删除并从最后可见的IMAP文件夹中删除时”设置为“立即永久删除邮件”
  • 但正如第二个设置中所述,您必须从所有IMAP文件夹中删除邮件。谷歌似乎将文件夹和标签混合在一起。因此,在gmail设置中使用过滤器标记电子邮件实际上会给此电子邮件添加一个二级标签/文件夹。第一个是“收件箱”。要将其删除,以便它不会显示在gmail应用程序中,您必须删除来自“收件箱”和其他标记文件夹的邮件,并为此邮件设置了“已删除”标志。但您必须对收件箱和其他文件夹执行此操作,其中的邮件具有不同的ID

    然后,邮件被移动到Gmail/Trash文件夹中,在最后删除之前,它会被保存30天或类似的时间


    谢谢你把我推到正确的方向。

    对于gmail,你需要将它们移到垃圾箱。删除它们会删除文件夹标签,这实际上会使它们“存档”。@Max啊,好的。谢谢你的帮助。你能把这作为一个答案,这样我就可以结束这个主题吗?对不起,我必须重新做accecpt。现在邮件有了[Imap]/垃圾标签。这意味着它们仍然出现在gmail android应用程序的收件箱中,并用该标签进行标记。删除它们会删除标签并存档:(知道tp如何永久删除它们而不在gmail应用程序中显示吗?提及gmail设置:“当邮件被标记为已删除并从最后可见的IMAP文件夹中删除时:”1-存档邮件(默认)2-将邮件移动到垃圾箱3-立即永久删除邮件。但是,将其设置为“3”似乎根本不会改变行为。邮件仍会在gmail应用程序中显示为“垃圾箱”标签或没有任何标签:(IMAP设置不起作用。你需要将其移动到垃圾箱,如果你真的想永远删除它,请切换到垃圾箱,然后从那里删除并删除它