【问题标题】:c# MailKit how to delete an email from mail server (IMAP)c# MailKit 如何从邮件服务器(IMAP)中删除电子邮件
【发布时间】:2014-09-03 15:23:38
【问题描述】:

我发现了这个:

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

then
client.Inbox.Expunge ();

我不知道如何获取 index 或 uid 以在此处使用。我的客户是这样工作的:

using (var client = new ImapClient())
{
                client.Connect(serverM.Text, Convert.ToInt32(portM.Text), true);
                client.AuthenticationMechanisms.Remove("XOAUTH");
                client.Authenticate(user.Text, pass.Text);
                var inbox =  client.GetFolder(inbox.Text);
                inbox.Open(FolderAccess.ReadWrite);
                var message = inbox.GetMessage(i);
                for (int i = 0; i < inbox.Count; i++) // 
                {
                    var message = inbox.GetMessage(i);
                    ...
                }
}

int I 也不是索引。 message.MessageID 不等于 UID。我的错在哪里?

【问题讨论】:

    标签: c# mailkit


    【解决方案1】:

    你在这里使用索引:

    for (int i = 0; i < inbox.Count; i++) // 
    {
        var message = inbox.GetMessage(i);
        ...
    }
    

    i 是索引。

    在最新版本的 MailKit 中,我添加了以下功能:

    inbox.AddFlags (i, MessageFlags.Deleted);
    

    所以现在你不需要这样做了:

    inbox.AddFlags (new int[] { i }, MessageFlags.Deleted);
    

    【讨论】:

    • 嗯,它删除了未读的消息,但我在标记删除之前读了“i”
    • 如果您正在使用 GMail,一旦您将邮件标记为 \Deleted,GMail 就会将它们移出文件夹,所以这可能就是您所看到的。
    • 我可能还应该指出,一次将一条消息标记为删除非常慢 - 一次标记一批消息会快得多。
    • @jstedfast 还有其他方法可以获取MimeMessage 的索引吗?我使用foreach 循环浏览文件夹中的消息,所以在这种情况下我没有索引。
    • 没有。您需要维护自己的索引偏移量。
    猜你喜欢
    • 2014-09-09
    • 2011-04-06
    • 1970-01-01
    • 2014-12-09
    • 2014-08-01
    • 2011-11-02
    • 2017-09-23
    • 1970-01-01
    • 2021-01-11
    相关资源
    最近更新 更多