IMAP コマンドを手打ちする (TLS対応)

メールサーバーの動作チェックなどで、IMAP コマンドを手打ちして各ステップを確認したいことがあります。昔は暗号化不要の POP3 を用いて動作チェックしていたこともありましたが懐かしいですね。

接続する

SSL (TLS) 有効なメールサーバーに接続するには、 openssl コマンドを使用します。IMAP サーバーが TLS 有効なポートとして 993 番ポート(デフォルト)となっているので、そのときの接続コマンドは以下の通りです。

openssl s_client -connect imap.mymailserver.com:993 -crlf -quiet

ここで -quiet を付与している理由は、openssl のハンドシェイク部分は今回確認不要としたいためです。状況によってはこのオプションを取り除いて挙動を確認するケースもあるでしょう。

上手く接続出来ると、以下のようなプロンプトが出ていることと思います。

depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign GCC R3 DV TLS CA 2020
verify return:1


* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.

ログインする

接続直後の状態ではメールボックスを覗けないので、まずはログインが必要です。

コマンドの入力では、先頭から順に、識別子、コマンド、引数・オプションとなります。ここでは識別子として、a01 から始め、数値部分をインクリメントするようにして使っていきます。

a01 login myuser@mail.example.com  mailuserpassword

ログインコマンドに続き、ユーザーのメールアドレス、そして、パスワードを入力します。この結果、以下のように OK が返ってくればログインに成功しています。

a01 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR ... (省略) ... SPECIAL-USE QUOTA] Logged in

メールボックスの表示

メールボックスを表示するためのコマンドは以下の通りです。

a02 list "" "*"

結果が以下のように返ってきます。

* LIST (\HasNoChildren \Junk) "/" Junk
* LIST (\HasNoChildren \Trash) "/" Trash
* LIST (\HasNoChildren \Drafts) "/" Drafts
* LIST (\HasNoChildren \Sent) "/" Sent
* LIST (\HasNoChildren) "/" INBOX
a02 OK List completed (0.001 + 0.000 + 0.001 secs).

続いてメールボックスを選択します。

a03 select "INBOX"

結果が以下のように返ってきます。

* FLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk \*)] Flags permitted.
* 6 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1646547891] UIDs valid
* OK [UIDNEXT 7] Predicted next UID
* OK [HIGHESTMODSEQ 18] Highest
a03 OK [READ-WRITE] Select completed (0.001 + 0.000 secs).

メールを見る

メールを検索します。search コマンドを実行すると、使用可能なメールの ID (メッセージ番号) が返ってきます。

a04 search all
* SEARCH 1 2 3 4 5 6
a04 OK Search completed (0.001 + 0.000 secs).

このメールを見るには、以下のコマンドを実行します。

a05 fetch 6 RFC822

実行するとメールの内容が取得・表示されます。メールヘッダ・本文共に表示されるので、掲載を省略します。

ログアウト

終了するときにはログアウトを行います。

a06 logout

まとめ

openssl コマンドを使うことで、暗号化経路を用いているときでも IMAP コマンドを手打ちして動作確認ができました。同じように暗号化ありの smtp についても適用できるとおもいます。

余談です。Thunderbird で IMAP のコマンドの様子を観察しようとして、うまくデバッグ出力が出てくれなかったため、手打ちで動作を確認した、という経緯があります。そもそもは プログラム上から IMAP がうまく接続されず、どこに課題があるのかを調査したかった、というのが背景でした。

関連記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください