0

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

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

如何使用 C 的 imap4-api(或只是类似的东西)来检查是否有任何未读电子邮件(不获取它们)?

提前致谢

4

2 回答 2

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
于 2010-12-30T03:55:03.650 回答
1

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

于 2010-11-13T11:17:28.463 回答