カテゴリ

コマンドリファレンス インターネット

Send to Kindle

半分ネタだけど結構大事だと思うこの手のお話。

任意のメールアドレス(例: info@example.com) 宛てに telnet でメールを送るとします。
その時大まかな手順は下記の通りになります。

  1. info@example.com を受け付けるメールサーバ(=SMTPサーバ)を見つける。
  2. 見つけたSMTPサーバに、telnet でSMTPプロトコルに合わせた通信をする。(俗に SMTPをしゃべる とか話すとかいうやつ)

info@example.com を受け付けるメールサーバ(=SMTPサーバ)を見つける

一般的に、info@example.com を受け付けるメールサーバは、DNSを利用して example.com の MXレコードを問い合わせることによって見つけます。
DNSを利用して検索するには、Windowsの場合 nslookupコマンド、Linux系の場合 digコマンドがよく利用されます。
※Linux系でもnslookupコマンドも存在しますが、非推奨とのこと。

以下、Windowsであればコマンドプロンプト、Linuxであればターミナルで実行するコマンド。

nslookup -type=mx example.com

または

nslookup
> set type=mx
> example.com

※各行でEnter

digの場合、

dig mx example.com

これにより、1つまたは複数の example.com 宛てのメールを受け付ける(ことになっている)メールサーバの名前・IPアドレスがわかります。
(今回は仮に mx.example.com が返ってきたとします)

※しかしここの動作が信用できなくなるかもしれない事象が起こっていますので、ぜひこちらもご覧ください。
 レジストラが登録ドメインを、停止ではなくNSを書き換える(そしてレジストリがそれを許可している)、ということ。

見つけたSMTPサーバに、telnet でSMTPプロトコルに合わせた通信をする

上記で見つけたサーバに対し、SMTP通信を行います。
例として今回は、送信側(自分側)のドメインは一応 example.jp、送信側のクライアントのFQDNをsmtp.example.jp、FROM を test@example.jp とでもしておきます。(SMTP通信的にはあまり重要ではないです)

telnet mx.example.com smtp
> helo smtp.example.jp
' helo の後にクライアントのFQDN
> mail from test@example.jp
' これは一般に エンベローブFrom と言われるFrom
> rcpt to info@example.com
' 同じく エンベローブTo 。宛先の指定。 結局ここで指定したメールアドレスにメールは送信される
> data
> From: test@example.jp
' ヘッダーFrom とか言われるFrom。メーラーで表示されているFromはたいていここ。
> To: info@example.com
' ヘッダーTo。同様に、メーラーで表示されているのはたいていここ。
> 
' ヘッダー部分と本文部分の区切りは、空白行1つ。
> | その後本文(や添付ファイル)を書く
> | (ただしSMTPプロトコルはASCII文字以外は通さないため、各種エンコードを利用してASCII文字列にした後のものを書く)
> .
' 行頭に .(ピリオド)1つだけでEnter。 ここで送信される(実際は次のquitで通信終了してからが多いような)
> quit

※実際は各行ごとにサーバサイドからの応答があります。

大雑把にはこんな感じで送信できます。

メーラーで見えるFrom/Toなどは結局上記のヘッダーFrom/Toであり、ここは実際の送受信通信には関係なく書いているだけのものなため、スパムメールなどによる詐称は容易です。
rcpt to は複数同時指定可能なので、

  • rcpt to に送り付けたい宛先を大量に投入
  • ヘッダーFrom/Toは関係ないアドレスを記載

とすることで容易にFrom/Toを詐称したスパムメールを送信可能になります。
※なので、スパムが届いたときに「From/Toが自分じゃないのに」とかいうのはナンセンスです。

送信先によって、いちいちSMTPサーバの設定を変更するのが面倒なので、その仕事をSMTPサーバにやらせ(リレーSMTPサーバ)、自分のメーラーには不変のSMTPサーバを設定する、というのが、一般的なメーラーの利用方法です。

メーラーやSMTPサーバは、上記のような手作業でやれる通信を自動的に行っています。

※注
スパム防止などの目的で、telnet によるSMTP通信はブロックされることも増えています。
また、他者のSMTPサーバに向けて上記のような実験をやることは悪ですのでやめてください。

kaz. Suenaga / 末永 和史 にコメントする コメントをキャンセル

いただいたコメント
  1. [Blog:技術系メモ http://t.co/Kz7CS9ck ] メーラーがなくても telnet でメールを送る方法。

  2. piyokango より:

    “技術系メモ メーラーがなくても telnet でメールを送る方法。” http://t.co/V4NpUtuy

  3. kaz. Suenaga より:

    (もう少しきれいに書きたい)