ちょっとSMTPがらみを調べてる時に telnet でメール送信できることを知りました。
SMTP(Simple Mail Transfer Protocol)は名前のごとく非常にシンプルなプロトコルです。
MUA(メールクライアント)から送信されたメールもしくは他のMTA(メールサーバ)から送信されたメールを受信し、自身の管理するドメインのものならメールボックスに格納し、他のドメイン宛てならそのドメインのメールサーバに転送するというものです。
SMTPはテキストベースのコマンドでやり取りしてるようです。(ちょうどFTPと似たような感じです。)
なので telnet でメール送信できるわけですね。
SMTP認証をしてない素のメールサーバに対してtelnetでメール送信する場合は下記のようなコマンドになります。
(Linuxのコンソールからとあるレンタルサーバで借りてるメールサーバにtelnetした場合です。)
$ telnet smtp.exsample.jp 25 ←メールサーバに接続
Trying xxx.xxx.xxx.xxx...
Connected to smtp.exsample.jp (xxx.xxx.xxx.xxx).
Escape character is '^]'.
220 smtp.exsample.jp ESMTP
HELO exsample.jp ←あいさつ(HELOの後はなんでもかまわない?)
250 smtp.exsample.jp
MAIL FROM:hoge00@exsample.jp ←送信元メールアドレス(エンベロープ送信者)
250 ok
RCPT TO:hoge01@exsample.jp ←送信先メールアドレス(エンベロープ受信者)
250 ok
DATA ←これからメール内容送ること通知
354 go ahead
subject: test ←ここから3行はメールヘッダ。
from: hoge00@exsample.jp
to: hoge01@exsample.jp
meil send test ←メール本文
. ←メール内容終わることを通知
250 ok 1280190256 qp 85712
quit ←コネクション終了
221 smtp.exsample.jp
Connection closed by foreign host.
ちなみに、ISP(プロバイダ)がスパム対策で、OP25BをしているとISP指定のメールサーバ以外にはポート25でアクセスできません。
その場合はtelnet接続時にMUAからMTAへの送信に使うポートとして推奨されているサブミッションポート587を指定するといいようです。
ちなみにsendmailとか使ってると下記のような感じになるようです。
(sendmailでメールサーバ構築し、サーバ上でメール送ってるのでtelnet先がlocalhostになっています。)
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.13.8/8.13.8; Tue, 27 Jul 2010 00:02:15 +0900
HELOO localhost
500 5.5.1 Command unrecognized: "HELOO localhost"
HELO localhost
250 localhost.localdomain Hello testserver [127.0.0.1], pleased to meet you
MAIL FROM:hoge00@exsample.jp
250 2.1.0 hoge00@exsample.jp... Sender ok
RCPT TO:hoge01@gmail.com
250 2.1.5 hoge01@gmail.com... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
subject: test
from: hoge00@exsample.jp
to: hoge01@gmail.com
this test
.
250 2.0.0 o6QF2FNx009985 Message accepted for delivery
quit
221 2.0.0 localhost.localdomain closing connection
Connection closed by foreign host.
このtelnetですが、Windowsのコマンドプロンプトからやるとメールヘッダや本文がうまく解釈されてませんでした。
(おそらく文字コードの問題だとは思うんですが。。)
普通のメールクライアントも上記のようなコマンドを発行してメール送信してるんですね。。
普段何気なく使ってるメールですが、調べると結構面白いです。いずれメールサーバ構築してみたいですね。
参考:
Simple Mail Transfer Protocol - Wikipedia
Linuxexpert - SMTP配送の仕組みとsendmail-MailServer/SMTP配送の仕組みとsendmail-PukiWiki