获取未读电子邮件的数量

时间:2010-11-12 09:09:23

标签: c imap email-client

我正在开发一个小软件来检查我的邮件帐户(任何免费邮件,imap)上是否有> 0个未读电子邮件。

我在C编码,但我不是专家...

如何使用C的imap4-api(或者只是可比较的)来检查是否有任何未读的电子邮件(不提取它们)?

提前致谢

2 个答案:

答案 0 :(得分: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

选择文件夹后,您可以发出SEARCH命令并询问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

答案 1 :(得分:1)

鉴于您确实似乎在使用C API,您可以为UNSEEN消息执行imap4_search。这应该允许您计算未读消息的数量。可以在此处找到类似的PHP示例:http://www.electrictoolbox.com/php-imap-unread-messages/