2010-11-12 17 views
0

Je travaille sur un petit morceau de logiciel pour vérifier s'il y a 0> e-mails non lus sur mon compte mail (tout courrier gratuit, imap).Obtenez le nombre de messages non lus

Je codage dans C, mais je ne suis pas un expert ...

Comment imap4-api de C (ou tout simplement STH comparable) être utilisés pour vérifier s'il y a des e-mails non lus (sans les chercher)?

Merci à l'avance

+0

Êtes-vous toujours à la recherche d'une API ou de l'API C? Quelque chose comme imap4_search() faire une recherche de messages non lus devrait faire l'affaire devrait-il pas? – Bart

+0

Tout ce que je l'ai trouvé à ce jour est la suivante: http://docs.sun.com/source/816-6027-10/imrc.htm Mais je ne suis pas encore clair sur la façon d'obtenir le nombre de mails non lus – Bernd

+0

' à long mail_status (* Mailstream flux, char * MBX, drapeaux longs); '- appeler avec' flags' à 'SA_UNSEEN'. – dkarp

Répondre

3

Il y a plusieurs façons de le faire. Je vais expliquer au niveau du protocole, et je parie que votre bibliothèque C exposera au moins un de ces ...

En général, le moyen le plus efficace est d'exécuter la commande STATUS et de demander le dossier UNSEEN count:

A001 STATUS "INBOX" (UNSEEN) 
* STATUS "INBOX" (UNSEEN 16) 
A001 OK STATUS completed 

vous pouvez sélectionner le dossier et vérifier si le code de réponse [INVISIBLE] revient sur un OK non marqué:

A002 SELECT INBOX 
* 223 EXISTS 
* 223 RECENT 
* OK [UNSEEN 1] mailbox contains unseen messages 
* OK [UIDVALIDITY 1] UIDs are valid for this mailbox 
* OK [UIDNEXT 554] next expected UID is 554 
* FLAGS (\Answered \Deleted \Draft \Flagged \Seen $Forwarded $MDNSent) 
* OK [PERMANENTFLAGS (\Answered \Deleted \Draft \Flagged \Seen $Forwarded $MDNSent \*)] junk-related flags are not permanent 
* OK [HIGHESTMODSEQ 504] modseq tracked on this mailbox 
A002 OK [READ-WRITE] SELECT completed 

une fois que le dossier a été sélectionné, vous pouvez émettre une commande de recherche et demander des messages UNSEEN (si quelque chose revient, vous avez du courrier non lu) :

A003 SEARCH UNSEEN 
* SEARCH 1 2 12 13 14 155 156 157 158 159 183 184 185 215 216 218 
A003 OK SEARCH completed 

Notez que tous ces éléments fonctionnent sur une base par dossier. Si vous voulez savoir sur tous les dossiers de votre boîte aux lettres, vous devrez parcourir tous. Pour obtenir la liste complète des dossiers, utilisez la commande LIST:

A004 LIST "" "*" 
* LIST (\HasNoChildren) "/" "Drafts" 
* LIST (\HasNoChildren) "/" "INBOX" 
* LIST (\NoInferiors) "/" "Junk" 
* LIST (\HasNoChildren) "/" "Sent" 
* LIST (\HasNoChildren) "/" "Trash" 
* LIST (\HasNoChildren) "/" "Unread Messages" 
A004 OK LIST completed