2010-10-24 3 views
4

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

EDIT: Как описано в тегах, для C#. Как я узнал, IMAP является путь, и я подтвердил все учетные записи электронной почты, я собираюсь использовать иметь IMAP активировано :)

+2

Вам нужно включить больше информации. Вы отметили это как C#, поэтому мы можем предположить, что это язык программирования, о котором идет речь, но вам нужно указать почтовый протокол (POP, IMAP, Exchange, ...) – greg

ответ

4

POP

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

IMAP

This question in SO имеет некоторые ссылки на примеры с использованием протокола IMAP. IMAP содержит сведения о состоянии почты (чтение/непрочитанное).

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

+0

Я редактировал свой вопрос. Я проверю ссылку на IMAP и проверю это как ответ, если это путь. Спасибо, сейчас. – Qosmo

1

Вот пример кода с библиотекой 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("[email protected]", "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); 
} 

Bit сложно, но работает отлично. Библиотека Limisoft не идеальна, поэтому не забудьте проверить ее.

0

Если то, что вы хотите сделать, это получить количество непрочитанных сообщений в папке 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); 
} 
Смежные вопросы