メールの送信テスト
最近はSMTP-AUTHなどで使う暗号化が当たり前なので、エンコードにプログラムを使って試験するしかないのですが、localhostからメールを出すときの試験は、telnetで簡単に試験することができます。メールの試験はともかく、メールサーバーとのやりとりがどのようにされているか知るだけでも、結構ためになったりします。
(1)SMTPサーバーへの接続
telnetを使って、SMTPサーバーへ接続します。
この場合、SMTPサーバーが接続許可をしていないといけないわけですが、localhostであれば通常は接続許可しているので、localhostのSMTPサーバーに接続します。
# telnet localhost 25
Trying 127.0.0.1...
Connected to smtp_test.
Escape character is '^]'.
220 smtp_test.fulldigit.net ESMTP Postfix (Debian/GNU)
(2)SMTPセッションの開始
ehloコマンドを発行して、SMTPサーバーからSMTPセッションを開始してもらいます。セッションが確立すると、下記のような情報がメーラーに返信されてくることになります。
情報を何気なしに見ていればわかりますが、例えば「SIZE 10240000」は、メールのサイズは10MBまでよ! と最初に伝えてきていますので、メーラーからそれを超えるメールを送ろうとすると、「メールの サイズが上限値を超えています。」といったメッセージが出せるわけですね。
> EHLO
250-smtp_test.fulldigit.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH NTLM DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
(3)エンベロープ上のメールの送信者を指定
mailコマンドでエンベロープの送信者のアドレスを指定します。
> MAIL FROM:
250 2.1.0 Ok
(4)エンベロープ上のメールの受信者を指定
rcptコマンドでエンベロープの受信者のアドレスを指定します。
> RCPT TO:
250 2.1.5 Ok
(5)メッセージデータを入力
QUITコマンドで接続を終了します。DELEコマンドでメールの削除要求を行っていれば、この時点で削除されます。
> DATA
354 End data with
> subject:Test Mail
> from:test@fulldigit.net
> to:test@xxx.co.jp
※メール本文の入力> test mailbody
※メール本文の最後に「.」ピリオドを入力して、メールを送信> .
250 2.0.0 Ok: queued as 6F6E42B0B4D
(6)接続の終了
> QUIT
221 2.0.0 Bye
Connection closed by foreign host.
これでメールが送信できているはずなので、メールを受信して確認しましょう。
メールを送信する操作や原理は簡単ですね。通常使っているメーラーは、コマンド部分を自動的に発呼しているだけということになります。
その他にもいろいろなコマンドがあるので、参考まで
コマンド | コマンドの動作 |
---|---|
EHLO | SMTPセッションの開始。SMTPサーバはSMTPクライアントを識別し、もしそのクライアントがそのSMTPサーバを利用できるならばセッションが開始される。 |
AUTH | SMTP認証 サーバとクライアントがSASL(RFC 2222)を利用して相互認証できるようになる。 |
MAIL FROM: | エンベロープ上のメールの送信者を示す。(メールヘッダーのFrom:とは意味が異なる) |
RCPT TO: | エンベロープ上メールの受信者を示す。(メールヘッダーのTo:とは意味が異なる) |
DATA | メッセージデータを送る。メッセージの終わりには「.」(ピリオド)だけの行を入力する。 メールのヘッダー部分(Subjectやfrom,to)もここで入力。 |
QUIT | セッションを終了。 |
VRFY | アドレスを参照する。 |
EXPN | エイリアスを展開する。 |
HELP | SMTPコマンドのhelpを参照する。 |
RSET | セッションの状態をリセット。 |
SEND | ユーザ端末に送られるメッセージの送信者を示す。 |
SOML | 端末に出力あるいはメール。 |
SAML | 端末出力とメール。 |
TURN | クライアントとサーバの役割の交換する。 |