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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 30 декабря 2010

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

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

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

После выбора папки,Вы можете выполнить команду SEARCH и запросить НЕПРИЕМЛЕДЫЕ сообщения (если что-то возвращается, у вас есть непрочитанная почта):

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
1 голос
/ 13 ноября 2010

Учитывая, что вы действительно используете C API, вы можете сделать imap4_search для НЕПРИВОДНЫХ сообщений.Это должно позволить вам подсчитать количество непрочитанных сообщений.Подобный пример PHP можно найти здесь: http://www.electrictoolbox.com/php-imap-unread-messages/

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