動画:SMTPの概要
SMTPに関する簡単な概要動画を制作しました:
この動画は、DMARCに関するあらゆる情報を網羅した動画シリーズの一部です。
以下が議事録です:
この短い動画では、電子メールの基本と、SMTP(Simple Mail Transfer Protocol)と呼ばれるプロトコルを介してインターネット上でどのようにやり取りされるかについて解説します。
この動画は、dmarcianの開発チームが、世界中でDMARCの普及を促進し続けるために制作したものであるため、SMTPとDMARCの関係について特に重点を置いて解説しています。
SMTPは、電子メールがインターネットを経由して送信される際に、サーバー間でメールを配信するために使用されます。SMTPは、2つの異なるサーバー間でメールを引き継ぐ役割を果たしており、その際、対話形式のコマンドセットを使用します。つまり、サーバー同士が通信し、互いの情報や 引き渡される電子メールに関する情報を交換し、その後、実際の電子メールが受信サーバーに送信されます。このやり取りは、SMTP会話と呼ばれます。
SMTP通信の仕組みについて詳しく説明する前に、SMTPが関与する以前に多くの処理が行われている点に留意することが重要です。まず、人またはメールを送信するソフトウェアによってメール本文が作成されます。 その後、そのユーザーまたはソフトウェアが「送信」ボタンを押すと、メールクライアントが送信用メールサーバーに接続します。メールクライアントを使ったことがある方なら、メール送信のためにサーバーやユーザー名、パスワードの入力を求める設定画面を見たことがあるでしょう。これらの認証情報は、メールクライアントが送信用サーバーに接続する際に使用され、これにより送信用サーバーは、クライアントに代わってメールを配信してもよいことを認識します。
その後、送信サーバーは興味深い処理を行います。 送信サーバーは、受信者のメールドメインを確認することで、そのメールがどこに送信されるかを判断します。受信者のドメインが判明すると、送信サーバーはグローバルなドメインネームシステム(通常「DNS」と呼ばれます)に対し、受信者のドメインに代わってメールを受け付けるサーバーのリストを問い合わせます。リストが返されると、送信サーバーは受信者のドメインのメールを受け入れるサーバーに接続できます。 受信者ドメインのメールを受け付けるサーバーに接続します。その接続が確立されると、SMTP通信が開始されます。なお、SMTPの「S」は「Simple(シンプル)」を意味していることを覚えておいてください!
SMTP通信とは、送信側のメールサーバーが受信サーバーに送る一連のコマンドのことです。各コマンドに対して受信サーバーは応答を返し、その応答は数値コードとそれに続く通常のテキストメッセージで構成されています。これは、もしもCEOのメール――おそらくディナーパーティーや電気自動車をめぐるスキャンダルに関するものだったでしょう――に何が起きたのかを突き止めるために、メールログという名の「地獄」に足を踏み入れざるを得なくなった際、人々の負担を軽減するためのものです。
ここでは、通信の例を順を追って見ていきます。この例では、送信サーバーとして「smtp.sample.net」(画面上部の青色で表示)を、受信サーバーとして「mail.example.org」(緑色で表示)を使用しています。画面中央を下る大きな矢印が示すように、通信の流れは上から下へと進みます。 送信サーバーが受信サーバーに接続した後、最初に発行するコマンドはHELOコマンドで、これには送信サーバーの名前が含まれています。これは、パーティーで自己紹介をするようなものです…「こんにちは、私は送信メールサーバーです」。
ちなみに、これは仕組みを説明するためのサンプル会話に過ぎません。実際の運用では、「HELO」コマンドはほぼ「EHLO」コマンド(E-H-L-O)に置き換えられています。EHLOコマンドへの応答の一部として、受信サーバーは送信サーバーに対して、受信側の機能に関する情報を返すことができるようになっています。 SMTPには時折拡張機能が追加され、メールの機能は常に最新の状態に保たれていますが、その一方で、SMTPの「S」の部分は少し 冗談のようなものにしてしまっています。
さて、余談はこれくらいにして本題に戻りましょう。受信サーバーが「OK、続けてください」と伝えるために使用する数値コードは「250」です。ここでは、HELOコマンドへの応答として、受信サーバーは250を返し、自身のサーバー名を含めます。これは、まるで「こんにちは、私は送信メールサーバーです」という挨拶に対して、「やあ、私は受信サーバーです。話しましょう」と返事をするようなものです。
その後、送信メールサーバーは、受信サーバーに対してメールの送信元を通知することで、メールを配信したい旨を伝えます。これが「MAIL FROM」コマンドであり、この例では「[email protected]」を使用しています。このコマンドに対して、受信サーバーは「250 – この送信者は問題ありません、送信してください」という返信を送ります。 この応答を受け、送信サーバーは処理を続け、受信サーバーにメールの宛先を伝えます。これが「RCPT TO」コマンドであり、例として「[email protected]」というアドレスが使用されています。SMTP通信の前に実行された接続前のやり取りのおかげで、送信サーバーは 受信サーバーが受信者ドメインに代わってメールを受け入れることを期待できます。そうでなければ、送信元サーバーはこの受信サーバーに接続しなかったでしょう!
そこで、受信サーバーは250を返答し、受信者が実際に正常であることを示します。
この通信を終了するために、送信サーバーはDATAコマンドを送信し、メールの実際の本文が送信されることを受信側に通知します。受信側は数値コード354で応答し、メール本文が送信された後、送信サーバーはQUITコマンドで接続を切断します。
なお、メール本文が配信された後、受信サーバーは250応答の後に情報を追加する場合があります。このわずかな追加情報は、メールの行方を特定するために人間の介入が必要になった際に非常に役立ちます。送信サーバーの管理者は、受信サーバーの管理者に連絡し、「あなたが 」と尋ねることができます。 そうすれば、相手側のオペレーターは、提供された番号を使ってそのメールの行方を追跡することができます。
ごく簡単に言えば、SMTPは次のように機能します。受信サーバーがメールを受信すると、そのメールはスパム対策スキャンやDMARCチェックなどの処理を経た後、受信トレイへ配信されることになります。
実際のメールの内容はどうなっていますか? どのような内容なのでしょうか?
1通のメールは、ヘッダーと本文の2つの部分で構成されています。
ヘッダーを含むセクションは、常にメールの先頭にあります。ヘッダー自体はタグと値のペアで構成されており、タグ部分はヘッダー名にコロンを付けたもので、値部分はそれ以降のすべての内容です。値は、続きの行が空白文字で始まる限り、複数行にまたがることもあります。ここでの例では、最初の2つのヘッダー(Return-Path と Delivered-To)は1行のヘッダーですが、3番目のヘッダーであるAuthentication-Resultsは、合計3行にわたっています。
メールには、元の送信者によって少数のヘッダーが追加されますが、メールがインターネット上を移動するにつれて、そのメールを経由する各サーバーがヘッダーを追加することがあります。通常、ヘッダーはメールがどの経路を通ってきたかを把握しやすくするために追加されますが、受信サーバーが有用と判断した追加情報が含まれることもあります。
Return-Pathヘッダーは少し特殊なもので、注目に値します。このヘッダーには、SMTPのMAIL FROMコマンドで表示されたメールアドレスのコピーが含まれています。Return-Pathヘッダーは受信サーバーによって設定されるため、メールが配信されるまでに複数のサーバーを経由する場合、Return-Pathヘッダーは何度も変更される可能性があります。 メールの内容が単純だなんて誰も言っていませんし、S-MAILやSMAILのようなものでもありませんから、この点はひとまず置いておきましょう。
最後のヘッダーは、メール本文の始まりを示します。ほとんどのメールクライアントでは、「件名」、「差出人」、「日付」などのヘッダーを除き、その他のヘッダーは非表示になります。メール本文こそが、ユーザーが実際に読む部分です。 この例は非常に単純なものですが、最近のメールの多くは、MIME(Multipurpose Internet Mail Extensions)を使用して、メールの書式設定やコンテンツ認識機能を拡張しています。MIMEに関する詳細については、聴講者の皆様の課題としてお任せします!
技術的な観点からDMARCの仕組みを理解するには、SMTPや電子メールの構造について知っておくことが重要です。DMARCは、SPFまたはDKIMのいずれかを使用して、電子メールの内容とドメインとの間に紐付けを行う仕組みとなっており、その詳細についてはDMARCの技術概要動画で詳しく解説されています。
DMARCの利用を開始するには、dmarcian.com をご覧ください。
ご質問は [email protected] までお問い合わせください。
ご視聴ありがとうございました!