2010年7月23日金曜日

imap プロトコル

imapのプロトコルで一般的なものをメモ。


$ telnet example.com 143

001 CAPABILITY
002 LOGIN ユーザ名 パスワード
003 NOOP
004 LIST "" "*"
005 STATUS "INBOX" (MESSAGES RECENT UNSEEN)
006 SELECT INBOX
007 APPEND INBOX {74}
From: xxxxxxxx
To: yyyyyyyy
Subject: EXAM MAIL

This is an exam mail.
008 STATUS "INBOX" (MESSAGES RECENT UNSEEN)
009 SEARCH unseen
010 uid SEARCH charset utf-8 body "exam"
011 uid SEARCH charset utf-8 body {4}
exam
012 FETCH $num RFC822
013 CREATE "hoge_directory"
014 COPY $num "hoge_directory"
015 DELETE "hoge_directory"
016 STORE $num +FLAGS (\Deleted)
017 EXPUNGE
018 LOGOUT


左行の数字は行数を表すために書いたものではない。
プロトコル上必須である。数字ではなくとも、A、B、Cなどでもよい。

007の"74"というのはヘッダとボディのサイズである。
誤差なく指定する必要がる。
いちいち数えていられないので、この辺りははツール化した方がいいだろう。


010と011(とその下)は同じことをしている文字列検索である。
IMAP4では文字列として「Literal」と「Quoted」という2種類の表現形式を持っているので、
2通りの検索方法を示した。

・ Quotedは文字列を"(ダブルクォーテーション)で囲む形式である。
"exam"

・ Literalは次のように扱う。
{文字数}CRLF 実際の文字列


また、複数条件で検索する場合は下記のように行う。
imapは前置記法である。
uid SEARCH charset utf-8 or or subject "MAIL" body "exam" body "mail"


012、014、016に現れる$numは変数である。
検索の結果表示される、各メールに割り振られたユニークな番号(UID)を入れること。