Получать непрочитанные электронные письма и оставлять их как непрочитанные во входящих - PullRequest
1 голос
/ 07 мая 2020

Я использую 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 и оставить как непрочитанные на почтовом сервере.

1 Ответ

1 голос
/ 07 мая 2020

При получении сообщения электронной почты большинство серверов помечают его флажком «SEEN». Если вы хотите оставить электронное письмо непрочитанным, вы можете просто удалить этот флаг.

Кроме того, вместо использования ImapClient.ListMessages вы можете использовать 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...