IMAP IDLEを手打ちコマンドで動作確認する

IMAP IDLEって?

 メールサーバ上のメールにアクセスするためのプロトコルであるIMAPを用いて、メールが届いたことを即座に把握するための拡張です。いわゆるプッシュ通知。

 ここではIMAP IDLEの動作を手打ちで見るために必要な操作に絞って記載します。

参考

確認環境

  • サーバ : Dovecot 2.3.14

準備

 クライアントにTelnetかOpenSSLが必要になります。どちらもWindows/Linux/Mac OSにインストールして用意できると思いますが方法は割愛します。

IMAPサーバへの接続

接続を暗号化していない場合

 Telnetで接続します。

telnet [メールサーバのドメインまたはIPアドレス] 143

接続を暗号化している場合(SSL/TLS)

 接続を暗号化していて、接続ポートがTCP 993の場合。
 OpenSSLで接続します。

openssl s_client -connect [メールサーバのドメインまたはIPアドレス]:993 -crlf -quiet

接続を暗号化している場合(STARTTLS)

 接続を暗号化していて、接続ポートがTCP 143の場合。
 OpenSSLで接続します。

openssl s_client -connect [メールサーバのドメインまたはIPアドレス]:143 -crlf -quiet -starttls imap

IMAPのコマンド操作

タグについて

 基本的にIMAPのコマンドの先頭にはクライアントが任意のタグを付ける必要があります。
 以下の例で言えば、「a001」がタグです。

a001 select "inbox"

 IMAPのコマンドは非同期で実行が可能であり、応答が何についてのものなのかクライアント側で把握するためにタグを付けます。
 とりあえず手動で打つ場合は適当な英数字にしておけば問題ないと思われます。

ログイン

 ここではパスワードが平文の場合を記載します。
 パスワード自体を暗号化して認証する方式などまで含めると多様すぎるため、参考元などの詳しい情報をご確認ください。

a001 login [メールユーザ] [パスワード]

メールボックスのリスト

a002 list "" "*"

 以下の例のようにアカウント内のメールボックスの一覧が表示されます。

a002 list "" "*"
* LIST (\HasNoChildren \UnMarked \Archive) "/" Archive
* LIST (\HasNoChildren \UnMarked \Sent) "/" Sent
* LIST (\HasNoChildren \UnMarked \Drafts) "/" Drafts
* LIST (\HasNoChildren \Trash) "/" Trash
* LIST (\HasNoChildren \Junk) "/" Junk
* LIST (\HasNoChildren) "/" INBOX
a002 OK List completed (0.003 + 0.000 + 0.002 secs).

メールボックスの選択

 IMAP IDLEでメールボックスの件数の変化を確認するためには、対象のメールボックスを選択しておく必要があります。(これを書き残すきっかけです)
 ほとんどの場合はデフォルトのメールボックスであるinboxになると思いますが、違う場合は前述の方法でリストから対象の名称を確認して書き換えてください。

a003 select inbox

IDLE 

IDLEの待受

a004 idle

 待受状態になると、以下のようにサーバの状態が送られてきます。

a004 idle
+ idling
* OK Still here
* 12 EXISTS
* 1 RECENT
* OK Still here

 一定間隔で接続の生存確認としてOK Still hereが送られます。これはサーバ側の設定で感覚が異なります。
 メールボックスに変化があるとEXISTS(メールの総数)とRECENT(RECENT[最近?]フラグがついたメール数)が送られます。

IDLEの終了

 IDLE状態を明示的に終了する場合は以下のコマンドを送ります。
 これは先頭にタグが必要ありません。

done

ログアウト

a005 logout

コメント