私は、自分のメール アカウント (フリー メール、imap) に未読メールが 0 件以上あるかどうかを確認するための小さなソフトウェアに取り組んでいます。
私はCでコーディングしていますが、専門家ではありません...
C の imap4-api (または sth に匹敵するもの) を使用して、未読のメールがあるかどうかを (取得せずに) 確認するにはどうすればよいですか?
前もって感謝します
私は、自分のメール アカウント (フリー メール、imap) に未読メールが 0 件以上あるかどうかを確認するための小さなソフトウェアに取り組んでいます。
私はCでコーディングしていますが、専門家ではありません...
C の imap4-api (または sth に匹敵するもの) を使用して、未読のメールがあるかどうかを (取得せずに) 確認するにはどうすればよいですか?
前もって感謝します
それを行うにはいくつかの方法があります。プロトコルレベルで説明しますが、Cライブラリがこれらの少なくとも1つを公開することは間違いありません...
一般に、最も効率的な方法は、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
実際にCAPIを使用しているように見える場合は、UNSEENメッセージに対してimap4_searchを実行できます。これにより、未読メッセージの数を数えることができます。同様のPHPの例はここにあります:http ://www.electrictoolbox.com/php-imap-unread-messages/