我正在开发一个小软件来检查我的邮件帐户(任何免费邮件,imap)上是否有> 0个未读电子邮件。
我在C编码,但我不是专家...
如何使用C的imap4-api(或者只是可比较的)来检查是否有任何未读的电子邮件(不提取它们)?
提前致谢
答案 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/