Проверить непрочитанные письма - PullRequest
4 голосов
/ 24 октября 2010

Я ищу способ проверить количество непрочитанных писем в учетной записи электронной почты.Любые советы?

РЕДАКТИРОВАТЬ: Как описано в тегах, для C #.Как я узнал, IMAP - это путь, и я подтвердил, что все учетные записи электронной почты, которые я собираюсь использовать, активировали IMAP :)

Ответы [ 3 ]

4 голосов
/ 24 октября 2010

POP

Вы можете использовать OpenPOP.net для чтения электронных писем по протоколу POP. Проблема с POP заключается в том, что он не содержит подробностей, независимо от того, был ли он непрочитанным или нет. Поэтому я думаю, что это не будет для вас большой пользой. У вас есть собственный способ загрузки и пометки электронных писем как прочитанных или непрочитанных.

IMAP

Этот вопрос в SO содержит ссылки на примеры использования IMAP. IMAP содержит подробную информацию о состоянии почты (прочитано / не прочитано).

Пожалуйста, объясните больше о вашем требовании.

1 голос
/ 13 октября 2016

Если вы хотите получить количество непрочитанных сообщений в папке IMAP, вы можете использовать MailKit , чтобы сделать это:

using MailKit;
using MailKit.Search;
using MailKit.Net.Imap;

...

using (var client = new ImapClient ()) {
    // Note: depending on your server, you might need to connect
    // on port 993 using SecureSocketOptions.SslOnConnect
    client.Connect ("imap.server.com", 143, SecureSocketOptions.StartTls);

    // Note: use your real username/password here...
    client.Authenticate ("username", "password");

    // open the Inbox folder...
    client.Inbox.Open (FolderAccess.ReadOnly);

    // search the folder for new messages (aka recently
    // delivered messages that have not been read yet)
    var uids = client.Inbox.Search (SearchQuery.New);

    Console.WriteLine ("You have {0} new message(s).", uids.Count);

    // ...but maybe you mean unread messages? if so, use this query
    uids = client.Inbox.Search (SearchQuery.NotSeen);

    Console.WriteLine ("You have {0} unread message(s).", uids.Count);

    client.Disconnect (true);
}
1 голос
/ 30 марта 2011

Вот пример кода с библиотекой LumiSoft IMAP:

using LumiSoft.Net.IMAP;
using LumiSoft.Net.IMAP.Client;
using LumiSoft.Net;

...

using (IMAP_Client client = new IMAP_Client())
{
    client.Connect("imap.gmail.com", 993, true);
    client.Login("your.username@gmail.com", "your_cool_password");
    client.SelectFolder("INBOX");

    IMAP_SequenceSet sequence = new IMAP_SequenceSet();
    //sequence.Parse("*:1"); // from first to last

    IMAP_Client_FetchHandler fetchHandler = new IMAP_Client_FetchHandler();

    fetchHandler.NextMessage += new EventHandler(delegate(object s, EventArgs e)
    {
        Console.WriteLine("next message");
    });

    fetchHandler.Envelope += new EventHandler<EventArgs<IMAP_Envelope>>(delegate(object s, EventArgs<IMAP_Envelope> e){
        IMAP_Envelope envelope = e.Value;
        if (envelope.From != null && !String.IsNullOrWhiteSpace(envelope.Subject))
        {
            Console.WriteLine(envelope.Subject);
        }

    });

    // the best way to find unread emails is to perform server search

    int[] unseen_ids = client.Search(false, "UTF-8", "unseen");
    Console.WriteLine("unseen count: " + unseen_ids.Count().ToString());

    // now we need to initiate our sequence of messages to be fetched
    sequence.Parse(string.Join(",", unseen_ids));

    // fetch messages now
    client.Fetch(false, sequence, new IMAP_Fetch_DataItem[] { new IMAP_Fetch_DataItem_Envelope() }, fetchHandler);

    // uncomment this line to mark messages as read
    // client.StoreMessageFlags(false, sequence, IMAP_Flags_SetType.Add, IMAP_MessageFlags.Seen);
}

Немного сложно, но работает отлично.Библиотека Limisoft не идеальна, поэтому убедитесь, что вы хорошо ее протестировали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...