2010-11-12 5 views
0

Я работаю над крошечным программным обеспечением, чтобы проверить, нет ли >> сообщений об ошибках в моей почтовой учетной записи (любая бесплатная почта, imap).Получите количество непрочитанных писем

Я кодирование в C, но я не эксперт ...

Как imap4-апи C (или просто STH сопоставим) может быть использована для проверки, если есть непрочитанные сообщения электронной почты (не извлекая их)?

Заранее спасибо

+0

Вы все еще ищете API или используете API C? Что-то вроде imap4_search(), выполняющего поиск сообщений UNSEEN, должно делать трюк, не так ли? – Bart

+0

Все, что я нашел до сих пор, это: http://docs.sun.com/source/816-6027-10/imrc.htm Но я все еще не понимаю, как получить количество непрочитанных писем – Bernd

+0

' long mail_status (MAILSTREAM * stream, char * mbx, long flags); '- вызвать его с' flags', установленным на 'SA_UNSEEN'. – dkarp

ответ

1

Учитывая, что вы, кажется, действительно, использует API C, вы можете сделать imap4_search непросмотренных сообщений. Это должно позволить вам подсчитать количество непрочитанных сообщений. Аналогичный пример PHP можно найти здесь: http://www.electrictoolbox.com/php-imap-unread-messages/

3

Существует несколько способов сделать это. Я объясню на уровне протокола, и я бы поспорил, что ваша библиотека C выведет хотя бы одну из этих ...

В общем, наиболее эффективным способом является выпуск команды STATUS и запрос на UNSEEN папки количество:

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

вы можете выбрать папку и проверьте, поступает ли [UNSEEN] код ответа обратно на немаркированной OK:

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 

После того, как папка была выбрана, вы можете выдать команду ПОИСК и запросить сообщения UNSEEN (если что-то вернется, у вас есть непрочитанная почта):

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

Обратите внимание, что все они работают на основе каждой папки. Если вы хотите узнать обо всех папках в своем почтовом ящике, вам придется перебирать их все. Чтобы получить полный список папок, используйте команду 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 
Смежные вопросы