2010-10-24 8 views
4

Je cherche un moyen de vérifier le nombre d'e-mails non lus sur un compte e-mail. Des astuces?Vérifier les e-mails non lus

EDIT: Comme décrit dans les étiquettes, pour C#. Comme je l'ai appris IMAP est le chemin à parcourir et je confirme tous les comptes e-mail que je vais utiliser IMAP avoir activé :)

+2

Vous devez inclure Plus d'information. Vous avez étiqueté cela comme C# donc nous pouvons supposer que c'est le langage de programmation en question, mais vous devez spécifier le protocole de messagerie (POP, IMAP, Exchange, ...) – greg

Répondre

4

POP

You can use OpenPOP.net pour lire des e-mails en utilisant le protocole POP. Le problème avec le POP est qu'il ne contient pas de détails, qu'ils soient lus ou non. Donc, je pense que cela ne vous sera pas très utile. Vous avez votre propre façon de télécharger et d'étiqueter les e-mails comme lus ou non lus.

IMAP

This question in SO a quelques liens pour des exemples utilisant IMAP. IMAP a des détails sur l'état du courrier (lu/non lu).

S'il vous plaît expliquer plus au sujet de votre condition.

+0

J'ai édité ma question. Je vais vérifier le lien IMAP et vérifier cela comme une réponse si c'est la voie à suivre. Merci pour maintenant. – Qosmo

1

Voici l'exemple de code avec la bibliothèque IMAP Lumisoft:

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); 
} 

peu compliqué, mais fonctionne très bien. La bibliothèque Limisoft n'est pas parfaite, alors assurez-vous de bien la tester.

0

Si ce que vous voulez faire est d'obtenir le nombre de messages non lus dans un dossier IMAP, vous pouvez utiliser MailKit pour ce faire:

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); 
} 
Questions connexes