電子メールについて無知だったので調べた


電子メールについて無知でなんとなく使っていたので、使われているプロトコルについて少し調べた。

メールの配送

電子メールの配送は以下の3つのパートに分けることができる。

  1. 送信者の端末 ~ 送信者のアカウントがあるメールサーバ
  2. 送信者のアカウントがあるメールサーバ ~ 受信者のアカウントがあるメールサーバ
  3. 送信者のアカウントがあるメールサーバ ~ 受信者の端末

メールの配送に利用されるプロトコル

上記の1,2のパートでは、SMTP(Simple Mail Transfer Protocol)というプロトコルが利用される。
3にはPOP3(Post Office Protocol Version 3)や、IMAP4(Internet Message Access Protocol Version 4)が使われる。

POP3

メールボックスに届いたメールをまとめて読み出すことを主な目的としたプロトコル。読み出したメールは端末に保存するため通信が途切れてもメッセージを読むことができる。また、メールを読み出した後はサーバーから消去するので、サーバーの容量を心配しなくて済む。

IMAP4

サーバー上のメールボックスにメールを入れたままにして、それを読むことを目的としたプロトコル。ただし、IMAP4を利用したメールソフトでは一度読んだメールは端末に保存するなどの工夫が行われている。

POP3とIMAP4の使い分け

POP3とIMAP4の使い分けとしては、一台の端末でメールを読むだけで良いならPOP3、複数台の端末で同じメールを読みたいのならIMAP4を使うことが自然。最近では、複数の端末からメールを読むことも多いため、これまではIMAP4に対応していなかったメールサービスがIMAP4に対応するようなことも見受けられる。

SMTP

SMTPでのやりとりは全てテキストで行われ、サーバに対してコマンドを送ると、それに対するリプライがサーバから返ってくる。このようなやりとりをメールの送信が行われるまで何度も行う。

ますはメールを送ろうとする側がサーバーに対して、グリーディングを送りセッションの開始を告げる。続いて、差出人のメールアドレスを、次に宛先のメールアドレスを指定、ここでメールの本文を送り、通信を終了する。

SMTPで送信されるコマンドの例

  • HELO: サーバーへのセッションの開始を伝える
  • MAIL FROM: 差出人のメールアドレスを指定
  • RCPT TO: 宛先のメールアドレスを指定
  • DATA: メール本体
  • QUIT:終了

コマンドを送信するとサーバーから数字3桁のリプライコードが返ってくる。

リプライコードの例

  • 220: サービス準備OK
  • 221: チャネルクローズ
  • 250:リクエスト正常終了
  • 354: メール入力開始指定
  • 500: コマンド構文エラー

POP3やIMAP4もSMTPと同様にやりとりはテキストで行う。ただし、SMTPとは異なる点として利用の最初の段階で、ユーザーがサーバーにログインするためのやりとりを行う。

迷惑メールを防ぐために

SMTPの基本的なやりとりにはログインは不要。しかし、これでは迷惑メールなどの送信に不正利用される。

OP25B(Outbound Port 25 Blocking)

ISP(Internet Service Provider)内から外部のサーバの25番ポート(SMTPが利用するポート)への接続を禁止する。しかし、正当なメールの送信は問題なく行うことができるように、メールサーバに587番ポート(サブミッションポート)を用意し、このポートにはSMTP-AUTH(メール送信時にIDとパスワードを必要とする仕組み)を設定して、サーバを利用する権限がある人のみメールを送ることができるよにしている。