SMTPとはSimple Mail Transfer Protocolの略で、メールを送信するために利用する通信プロトコルです。
このページでは、SMTP (Simple Mail Transfer Protocol) とは何か?SMTPはどのような仕組みで動いている?どんや役割を担っている?という疑問に対して1からわかりやすく解説します。
そもそも通信プロトコルって何?という方でもしっかり理解できるよう、必要となる周辺知識も一緒に理解できるように丁寧に説明します。
ネットワークエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。またネットワークエンジニアでなくてもITに関する仕事をしている方であれば知っておいて損はない知識です。是非最後までご覧ください。
読者特典 ゼロから学ぶネットワーク入門
SMTPとは?わかりやすく
SMTP(Simple Mail Transfer Protocol)は、インターネット上で電子メールを転送するためのプロトコルです。このプロトコルは、「①メールサーバ間のメール転送」や「②メールクライアントからメールサーバへのメール送信」に使用されます。
参考 サーバーとは?
ちょっとややこしい説明となりましたが、とりあえず、シンプルなメール「送信」プロトコルなんだな!と覚えて置ければOKです。
我々は毎日メールを送受信していますが、その裏で必ず動作しているのがこのSMTP。SMTPというプロトコルがなければメールを送受信することはできませんので、ほぼ毎日仕事で利用しているプロトコルの1つだと言えます。
では、SMTPは具体的にどのようにメール送受信を行っているのでしょうか?
ここから具体的にSMTPが何者か?をイメージできるように、SMTPを利用したメール送信の仕組みを1からわかりやすく図解していきます。
SMTPの仕組み
SMTP (Simple Mail Transfer Protocol) を利用したメール送信の流れは以下の通り。
1つ1つ順を追って解説します。ザックリ言うと、以下の4ステップでメールの送受信が行われます。
SMTPが利用されるのはステップ①と②です。
つまり、相手のメールサーバへメールを届けるところまでが役割で、その後はSMTPと対をなすプロトコルであるPOPが動作して受信者にメールを配信します。
郵便配達で例えると、「ステップ①:自宅から最寄りへの郵便局」「ステップ②:最寄りの郵便局から配達先の最寄りの郵便局」までの配送を行うのがSMTPの役割です。
我々が普段送っているメールは相手のコンピュータに直接届けられているわけではなく、メールサーバを経由してメールが届けられているというのが1つのポイント。その際に、メールサーバへのメール転送の役割を担っているのがSMTPであると理解しましょう!
なぜ、わざわざメールサーバを間に設置する必要があるの?という疑問については、本ページの最後の章で解説します。まずここでは、SMTP基本知識の理解に努めましょう。
SMTPをさらに詳しく
ネットワークエンジニアを目指す方向けにSMTPの仕組みを技術的な観点から詳しく解説します。特に、具体的にどのような通信を行うことで、それを実現しているのか?
以下がその答え(メーラーとメールサーバ間でやり取りされる通信の順序)を図解したものになります。
SMTPでは始めにTCPの25番ポートを利用してTCPコネクション(SMTPセッション)を確立します。
各種試験では、「TCPポート番号25 = SMTP」 が出題されるため基本知識として押さえておきましょう。
TCPによるコネクションの確立が完了した後は、SMTPコマンドという特別なコマンドを発行しながら、メーラーとメールサーバがデータ転送に関する制御&メール転送(送信元は?送信先は?件名は何?本文の内容は・・・?を定義)を行う仕組み。
SMTPコマンドを送ると、サーバ側からはSMTP応答コードが返答され、対話型の処理を行うのがSMTPの特徴の1つです。
分かりやすく言えば、例えばあなたがGmailでメール送信ボタンを押した裏側で「SMTPコマンド」が発行されているということ。そのコマンドに応じてメールサーバがメールを転送したり、送信者に異常を知らせたりするということです。
サンプル SMTPコマンド・SMTP応答コマンドの例
SMTPコマンドとそれに対するSMTPサーバの応答を使って、メールが送信されるプロセスは、実際の通信セッションで次のように進行します。ここでは、クライアント(メールを送る側)とサーバ(メールを受け取る側)の間のテキストベースのコマンドと応答のやり取りの一例を示します。
クライアント: EHLO mymailclient.com サーバ: 250-smtp.example.com at your service サーバ: 250-SIZE 52428800 サーバ: 250-8BITMIME サーバ: 250-STARTTLS サーバ: 250-ENHANCEDSTATUSCODES サーバ: 250-PIPELINING サーバ: 250-CHUNKING サーバ: 250 SMTPUTF8 クライアント: STARTTLS サーバ: 220 2.0.0 Ready to start TLS (セキュリティのために通信がTLSで暗号化されます) クライアント: EHLO mymailclient.com サーバ: 250-smtp.example.com at your service ... (他の応答は省略) ... クライアント: MAIL FROM:<sender@example.com> サーバ: 250 2.1.0 Sender <sender@example.com> OK クライアント: RCPT TO:<recipient@example.net> サーバ: 250 2.1.5 Recipient <recipient@example.net> OK クライアント: DATA サーバ: 354 Start mail input; end with <CRLF>.<CRLF> クライアント: From: sender@example.com クライアント: To: recipient@example.net クライアント: Subject: Test Message クライアント: クライアント: This is a test message. クライアント: . サーバ: 250 2.0.0 OK: queued as 12345 クライアント: QUIT サーバ: 221 2.0.0 Bye
次の章で細かく以下の1つ1つのコマンドをご説明しますので、ここでは何となくのイメージを持っていただければOKです。
図ではメーラーとメールサーバ間の通信を図時していますが、これはメールサーバとメールサーバ間の通信にも当てはまります。
大事なのはメール送受信の仕組みの全体像を把握することと、メールサーバ間における通信の仕組み・順序を把握することです。
SMTPコマンド
SMTPコマンドは上記で説明した通り、送るデータの種類や通信の開始通知を行うなど様々な役割があります。
以下に代表的なSMTPコマンドを記載します。ネットワークスペシャリスト試験ではSMTPコマンドに関する出題もなされるため、一通り頭に入れておきましょう。
コマンド | 説明 |
---|---|
HELO / EHLO | メールサーバに対する挨拶/通信開始の合図 |
送信元メールアドレス "FROM:<送信元メールアドレス>" をメールサーバに通知 | |
RCPT | 宛先メールアドレス "TO:<宛先メールアドレス>" をメールサーバに通知 |
DATA | メール本文をメールサーバに転送する |
VRFY | アドレスを参照する |
QUIT | メールサーバとの接続を終了する |
RSET | セッションの状態をリセットする(メールサーバとの接続を中断・中止する) |
HELP | SMTPコマンドのヘルプを要求する |
クライアント: EHLO mymailclient.com サーバ: 250-smtp.example.com at your service サーバ: 250-SIZE 52428800 サーバ: 250-8BITMIME サーバ: 250-STARTTLS サーバ: 250-ENHANCEDSTATUSCODES サーバ: 250-PIPELINING サーバ: 250-CHUNKING サーバ: 250 SMTPUTF8 クライアント: STARTTLS サーバ: 220 2.0.0 Ready to start TLS (セキュリティのために通信がTLSで暗号化されます) クライアント: EHLO mymailclient.com サーバ: 250-smtp.example.com at your service ... (他の応答は省略) ... クライアント: MAIL FROM:<sender@example.com> サーバ: 250 2.1.0 Sender <sender@example.com> OK クライアント: RCPT TO:<recipient@example.net> サーバ: 250 2.1.5 Recipient <recipient@example.net> OK クライアント: DATA サーバ: 354 Start mail input; end with <CRLF>.<CRLF> クライアント: From: sender@example.com クライアント: To: recipient@example.net クライアント: Subject: Test Message クライアント: クライアント: This is a test message. クライアント: . サーバ: 250 2.0.0 OK: queued as 12345 クライアント: QUIT サーバ: 221 2.0.0 Bye
上記のSMTPコマンドを定められた順序でメールサーバに発行することで一連のメール送信手順が完了。後続ではPOPによって宛先メールサーバ→受信者へのメール転送がなされるのがメール送受信の仕組みです。
MAILコマンドやRCPTコマンドなどはネットワークスペシャリスト試験等でもよく出題される知識ですので頭に入れておきましょう!
SMTP応答コード
SMTPコマンドに対する応答がSMTP応答コードです。
ざっくりいうと、200番台が処理の成功を表し、400番台が一時的なエラー(サービスダウンなど)を、500番台が永続的なエラー(コマンドの不正など)を表します。
SMTP応答コード | 意味 | 備考 |
---|---|---|
211 | システムの状態やシステムヘルプの応答 | HELPコマンドの応答 |
214 | ヘルプメッセージ (コマンドの使用方法ついての情報) | HELPコマンドの応答 |
220 | 準備完了 | 接続後の応答 |
221 | SMTP通信の終了 | QUITコマンドの応答 |
250 | 処理の成功 | SMTPコマンド全般に対する応答 |
251 | 受信者が存在しないため転送処理を行う | RCPT/VRFYコマンドの応答 |
354 | メール本文の入力を開始する | DATAコマンドの応答 |
421 | サービス利用不可 | SMTPコマンド全般に対する応答 |
450 | メールボックス利用不可 | RCPT/DATAコマンドの応答 |
451 | 処理中にエラーが発生 | MAIL/RCPT/DATAコマンドの応答 |
452 | システム容量が不足している | MAIL/RCPT/DATAコマンドの応答 |
500 | 文法エラー/コマンドが不正 | SMTPコマンド全般に対する応答 |
501 | 文法エラー(パラメータが不正) | SMTPコマンド全般に対する応答 |
502 | コマンド未実装 | EHLO/VRFY/EXPN/HELPに対する応答 |
503 | コマンドの順序が不正 | MAIL/RCPT/DATAコマンドに対する応答 |
504 | コマンドパラメータ未実装 | EHLO/HELO/VRFY/EXPN/HELPコマンド に対する応答 |
550 | メールボックス利用不可 | SMTPコマンド全般に対する応答 |
クライアント: EHLO mymailclient.com サーバ: 250-smtp.example.com at your service サーバ: 250-SIZE 52428800 サーバ: 250-8BITMIME サーバ: 250-STARTTLS サーバ: 250-ENHANCEDSTATUSCODES サーバ: 250-PIPELINING サーバ: 250-CHUNKING サーバ: 250 SMTPUTF8 クライアント: STARTTLS サーバ: 220 2.0.0 Ready to start TLS (セキュリティのために通信がTLSで暗号化されます) クライアント: EHLO mymailclient.com サーバ: 250-smtp.example.com at your service ... (他の応答は省略) ... クライアント: MAIL FROM:<sender@example.com> サーバ: 250 2.1.0 Sender <sender@example.com> OK クライアント: RCPT TO:<recipient@example.net> サーバ: 250 2.1.5 Recipient <recipient@example.net> OK クライアント: DATA サーバ: 354 Start mail input; end with <CRLF>.<CRLF> クライアント: From: sender@example.com クライアント: To: recipient@example.net クライアント: Subject: Test Message クライアント: クライアント: This is a test message. クライアント: . サーバ: 250 2.0.0 OK: queued as 12345 クライアント: QUIT サーバ: 221 2.0.0 Bye
ポイント サンプルの説明
EHLO
コマンドはセッションを開始し、クライアントがサーバに自己紹介。- サーバは
250
というステータスコードで応答し、使用できる機能をリストアップ。 STARTTLS
コマンドはセッションを暗号化することを要求。- 再度
EHLO
を送信して暗号化されたセッションでの通信を開始。 MAIL FROM
で送信者を、RCPT TO
で受信者を指定。DATA
コマンドは、メールのヘッダと本文を送信する準備ができたことをサーバに伝える。- ヘッダと本文を入力し、ピリオドだけの行でメール本文の終了をサーバに伝える。
- サーバが
250
ステータスコードで応答し、メールがキューに入ったことを確認。 QUIT
コマンドでセッションを終了。
SMTPサーバとは?
ここまで何度か登場している「メールサーバ」について少し深堀して解説します。
これまでは単にメールサーバという言葉を利用してきましたが、特にSMTPを利用してメールを送信することに特化したサーバ(上記の図でいう「送信側メールサーバ」)をSMTPサーバと呼びます。
SMTPサーバは、メーラー(Microsoft OutlookやGmailなど)から送信されたメールを受け取り、それを適切な宛先のメールサーバへ転送する役割に特化。メールの保管などを行う機能は持ちません。
SMTPサーバ、メールサーバの言葉の違いをここで整理しておきましょう。
SMTPサーバ:送信専用の郵便局
SMTPサーバは、あなたが書いた手紙(メール)を郵便局に持っていくシーンを思い浮かべるとわかりやすくなります。
あなたがメールを送る時、SMTPサーバはそのメールを受け取り、インターネットを通じて宛先の郵便局(宛先のメールサーバ)に届けます。これは、郵便局が他の郵便局に手紙を送るのと同じです。SMTPサーバは送るためのものなので、メールを受け取る機能はありません。
メールサーバ:郵便局の総合カウンター
メールサーバは郵便物の送受信をすべて管理する総合カウンターです。
SMTPサーバの機能を含むので、メールを送ることができますが、POPやIMAPといった他の「郵便受け」の機能を持っており、メールを受け取って保管することもできます。あなたがメールを受け取る時、メールサーバからあなたの「郵便受け」(メールクライアント)にメールが届けられます。なので、メールサーバはメールの送受信の両方を扱うことができる万能な郵便局のようなものです。
要するに、SMTPサーバはメールを送るための特化した郵便局であり、メールサーバは送るものと受け取るものの両方を管理する総合郵便局と考えることができます。
SMTPサーバの主な機能と役割
SMTPサーバの主な機能と特徴は以下の通り。
- メールの中継とルーティング
- 送信されたメールを受け取り、宛先アドレスに基づいて適切なサーバに転送します。
- 認証とセキュリティ
- スパムメールや不正アクセスを防ぐために、ユーザー認証やTLS(Transport Layer Security)による暗号化通信を提供します。
- 配信管理
- メールが正しく配信できなかった場合に、送信者に通知を行う機能を持っています。
- キュー管理
- 一時的にメールを保存し、配信の最適なタイミングで送信するためのキューシステムを持っています。
企業やISP(インターネットサービスプロバイダ)は独自のSMTPサーバを持つことが多く、メールサービスの提供者(例えば、GoogleのGmailやMicrosoftのOutlook.com)も独自のSMTPサーバを運用しています。SMTPサーバは、メール送信の基盤となる重要なインフラストラクチャの一部です。
補足:SMTPの歴史(初期の電子メール転送)
最後にSMTPに関する補足―。初期の電子メール配送について解説しておきます。
現在の電子メールは上記で解説した通り、送信者と受信者の間にメールサーバ(SMTPサーバ)を設置しスムーズにメール転送を行う仕組みを採用しています。
実はこの方式が採用される前は、以下のようにSMTPのみを利用して(POPを利用せずに)コンピュータ to コンピュータで直接SMTPを利用してメール転送を行っていたという歴史があります。
初期の電子メールではメールサーバの概念は存在せず、相手のコンピュータと直接TCPコネクションを確立し、そのうえでSMTPを用いてメール送信をする仕組みが用いられます。
間にメールサーバが存在する必要がなく、非常にシンプルな方式でメール転送を行っていたのですが、これには「受信者のコンピュータも常に電源ONでスタンバイしている必要がある」という大きなデメリットが存在。
相手の仕事が終わりPCの電源がオフになっているときには、メールを送信することができません。
そこで、常時電源ONの状態であるメールサーバを設置し、メールは必ずメールサーバを経由して相手に届けられる仕組みが考えられました。また、その際メールサーバに届けられたメールを自分のパソコンに取り込むためのプロトコル・仕組みも必要となるので、このときにPOPというプロトコルも登場するのです。
なぜ、メールサーバなんて必要なの?なぜSMTPとPOPの2つが必要なの?という疑問は、上記SMTPの歴史を踏まえるとその答えがよく分かるかと思います。
SMTPの仕組みだけを頭に入れるのではなく、過去の歴史までさかのぼって学習することでSMTPやメール送受信の仕組みをより本質的に理解することができるようになります。
ネットワーク学習の決定版(ネットワークエンジニアを目指すなら必見!)
↑ページ数が多く誰でも手軽に読める内容ではありませんが、ネットワークエンジニアであれば、ほぼ全員が一度は読んだことがある超・有料書籍。是非一度読破しておきたい1冊のご紹介です。
読者特典> 0から学ぶネットワーク入門