Apache JamesとTelnetでSMTP/IMAP/POP

はじめに

メール関連のプロトコルの学習のために、Apache JamesとTelnetでシンプルなメールの送受信を試してみました。

環境情報

  • OS: Windows Server 2012R2
  • Java: Oracle JDK 1.8.1u181
  • メールサーバ: Apache James 3.1.0
    • メールサーバもTelnetも同一ホスト

メールサーバのセットアップ

  1. Apache James3.1.0を公式サイトからダウンロード
  2. Apache Jamesドキュメントのクイックスタートガイドに従いインストール
    1. ただし↑にはないが以下の手順も必要
    2. Step 5: Startで./james startは.\james.bat startに読み替え
    3. Step 5: Startで.\james.bat start の前に.\james.bat installが必要
    4. Windows版のバグのため、2でインストールしたサービス「Apache James :: Server :: App」のログオンアカウントをSystemからユーザアカウントに指定

これで環境準備は完了です。

デフォルト設定で25(SMTP),143(IMAP4),110(POP3)番ポートがLISTEN状態なので、以降でTelnetでメール送受信を試します。

メールサーバ送信(SMTP)

以下Telnet実行コマンドのみ版(サーバ応答省略)

telnet 127.0.0.1 25
ehlo localhost
mail from:<myuser@myhostname>
rcpt to:<myuser@myhostname>
data
subject: test

this is a test
.
quit

メールサーバ送信(IMAP4)

以下Telnet実行コマンドのみ版(サーバ応答省略)

telnet 127.0.0.1 143
1 login myuser@myhostname  mypassword
2 list "" *
3 select INBOX
4 fetch 1 full

メールサーバ送信(POP3)

以下Telnet実行コマンドのみ版(サーバ応答省略)

telnet 127.0.0.1 110
user myuser@myhostname
pass mypassword
list
uidl
retr 1
dele 1
quit

補足

上記コマンドの実行時のサーバ応答も記載するとこんな感じになります。

SMTPコマンド実行時

telnet 127.0.0.1 25
220 MYHOSTNAME JAMES SMTP Server Server (JAMES SMTP Server ) ready
ehlo localhost
250-MYHOSTNAME Hello localhost [127.0.0.1])
250-PIPELINING
250-ENHANCEDSTATUSCODES
250 8BITMIME
mail from:<myuser@myhostname>
250 2.1.0 Sender <myuser@myhostname> OK
rcpt to:<myuser@myhostname>
250 2.1.5 Recipient <myuser@myhostname> OK
data
354 Ok Send data ending with .
subject: test

this is a test
.
250 2.6.0 Message received
quit
221 2.0.0 MYHOSTNAME Service closing transmission channel
Connection to host lost.

IMAP4コマンド実行時

telnet 127.0.0.1 143
* OK JAMES IMAP4rev1 Server  Server MYHOSTNAME is ready.
1 login myuser@myhostname  mypassword
1 OK LOGIN completed.
2 list "" *
* LIST (\HasNoChildren) "." "INBOX"
* LIST (\HasNoChildren) "." "Sent"
2 OK LIST completed.
3 select INBOX
* FLAGS (\Answered \Deleted \Draft \Flagged \Seen)
* 1 EXISTS
* 1 RECENT
* OK [UIDVALIDITY 666944598] UIDs valid
* OK [UNSEEN 1] MailboxMessage 1 is first unseen
* OK [PERMANENTFLAGS (\Answered \Deleted \Draft \Flagged \Seen \*)] Limited
* OK [HIGHESTMODSEQ 1] Highest
* OK [UIDNEXT 2] Predicted next UID
3 OK [READ-WRITE] SELECT completed.
4 fetch 1 full
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "22-Sep-2018 20:54:32 +0000" RFC822.SIZE 454 ENVELOPE (NIL "test" NIL NIL NIL NI
L NIL NIL NIL NIL) BODY ("TEXT" "PLAIN" ("charset" "us-ascii") NIL NIL "7BIT" 16 1))
4 OK FETCH completed.

POP3コマンド実行時

telnet 127.0.0.1 110
+OK <59850884.1537650512780@MYHOSTNAME> POP3 server (JAMES POP3 Server ) ready
user myuser@myhostname
+OK
pass mypassword
+OK Welcome myuser@myhostname
list
+OK 1 454
1 454
.
uidl
+OK unique-id listing follows
1 1
.
retr 1
+OK Message follows
Return-Path: <myuser@myhostname>
Delivered-To: myuser@myhostname
Received: from 127.0.0.1 (EHLO localhost) ([127.0.0.1])
          by MYHOSTNAME (JAMES SMTP Server ) with ESMTP ID -1572135435
          for <myuser@myhostname>;
          Sat, 22 Sep 2018 20:54:22 +0000 (UTC)
subject: test

this is a test
.
dele 1
+OK Message deleted
quit 1
+OK Apache James POP3 Server signing off.
Connection to host lost.

まとめ

Telnetでローレベルなシンプルなメール送受信を実行してみました。

実環境ではこれにSMTP認証や暗号化が乗っかってくるので、メールサーバ構築時のトラブルシューティングではまず上記基本シーケンスを理解しておくことが大事だと感じました。

あとApache Jamesは初期設定やクイックスタートがとても優しい感じなので、メールサーバ初心者にはとても嬉しいOSSでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA