检索未读的电子邮件,并将其保留为收件箱中未读的邮件

问题描述 投票:0回答:1

我正在使用GemBox.Email,并且正在这样从收件箱中检索未读的电子邮件:

using (var imap = new ImapClient("imap.gmail.com"))
{
    imap.Connect();
    imap.Authenticate("username", "password");
    imap.SelectInbox();

    IEnumerable<string> unreadUids = imap.ListMessages()
        .Where(info => !info.Flags.Contains(ImapMessageFlags.Seen))
        .Select(info => info.Uid);

    foreach (string uid in unreadUids)
    {
        MailMessage unreadEmail = imap.GetMessage(uid);
        unreadEmail.Save(uid + ".eml");
    }
}

该代码来自Receive示例,但问题是,在检索它们后,它们最终在我的收件箱中被标记为已读。

如何防止这种情况发生?我想用ImapClient下载它们,并在电子邮件服务器上将其保留为未读。

c# email imap gembox-email
1个回答
0
投票

[检索电子邮件时,大多数服务器都将其标记为“ SEEN”。如果您想让电子邮件保持未读状态,则可以删除该标志。

此外,也可以使用ImapClient.ListMessages来获取未读电子邮件的ID,而不是使用ImapClient.SearchMessageUids。>

因此,请尝试以下操作:

using (var imap = new ImapClient("imap.gmail.com"))
{
    imap.Connect();
    imap.Authenticate("username", "password");
    imap.SelectInbox();

    // Get IDs of unread emails.
    IEnumerable<string> unreadUids = imap.SearchMessageUids("UNSEEN");

    foreach (string uid in unreadUids)
    {
        MailMessage unreadEmail = imap.GetMessage(uid);
        unreadEmail.Save(uid + ".eml");

        // Remove "SEEN" flag from read email.
        imap.RemoveMessageFlags(uid, ImapMessageFlags.Seen);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.