3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

telnetでSMTPメール送信

ちょっとSMTPがらみを調べてる時に telnet でメール送信できることを知りました。

まずはSMTPプロトコルのおさらいです。

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になっています。)

# telnet localhost 25

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コマンドプロンプトからやるとメールヘッダや本文がうまく解釈されてませんでした。

(おそらく文字コードの問題だとは思うんですが。。)

なので、Linuxからした方が無難かもしれません。

普通のメールクライアントも上記のようなコマンドを発行してメール送信してるんですね。。

普段何気なく使ってるメールですが、調べると結構面白いです。いずれメールサーバ構築してみたいですね。

参考:

Simple Mail Transfer Protocol - Wikipedia

Geekなぺーじ : メールの仕組み(SMTP)

Linuxexpert - SMTP配送の仕組みとsendmail-MailServer/SMTP配送の仕組みとsendmail-PukiWiki

telnetでメール送信