2010-11-12 112 views
0

我正在研究一小段软件,以检查我的邮件帐户(任何免费邮件,imap)是否有> 0个未读电子邮件。获取未读电子邮件的数量

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

如何C'S IMAP4-API(或只是某事可比)来检查是否有任何未读邮件(不取他们)?

在此先感谢

+0

您还在寻找API还是使用C API?像imap4_search()搜索UNSEEN消息应该做的伎俩不应该吗? – Bart 2010-11-12 09:25:40

+0

我到目前为止发现的所有内容都是这样的:http://docs.sun.com/source/816-6027-10/imrc.htm 但是我还不清楚如何获取未读邮件的数量 – Bernd 2010-11-12 09:27:33

+0

' long mail_status(MAILSTREAM * stream,char * mbx,long flags);' - 用设置为'SA_UNSEEN'的'flags'调用它。 – dkarp 2011-01-11 21:08:59

回答

3

有几种方法可以做到这一点。我会在协议层解释,我敢打赌,你的C库会公开至少其中一个...

通常最有效的方法是发出STATUS命令并要求文件夹的UNSEEN统计:

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

您可以选择文件夹并选择[UNSEEN]响应代码是否回来上无标记的确定:

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