メールの仕組みを概観する 2
ブラウザからのメール送受信について解説します。 今まで、サーバー上で完結するメールのやり取りを見てきました。次は、それにブラウザをつけてみます。 なお、ブラウザと言っていますが、PC にインストールするようなメールソフトも同じように考えてくれて大丈夫です。
1. 全体像
さて、今のところサーバー同士でのメールのやり取りは可能です。ここにブラウザを入れるために、必要なものを考えてみましょう。 送信と閲覧に分けて考えます。送信の反対は受信ですが、サーバー上での受信と紛らわしいため、閲覧という言葉を使います。
1.1. 送信
これは簡単です。ユーザーが送りたいときに送るだけなので、普段サーバーに入ってコマンドを打っている処理を、ブラウザからも行えるようにすれば問題なさそうです。 メールサーバー → メールサーバーという通信を SMTP が規定しているので、それと同じ通信をブラウザ → メールサーバーでもやればいいだけです。
1.2. 閲覧
SMTP はメールを送るプロトコルなので、送った後のメールについては関知しません。MTA や MDA も同様です。なのでこちらは新しい仕様を考える必要がありそうです。 具体的な役割としては、サーバー側で動作して受信したメールを返すような役割、返されたメールをクライアント側でユーザーに表示する役割、そしてこの二者の通信をどのように行うかという取り決めが必要そうです。
2. サーバー側で動作して、受信したメールを返す役割(MRA)
MRA(Mail Retrieval Agent):メール検索エージェントです。 所定のメール保管場所にあるメールを、MUA に渡してあげる機能を担います。渡し方として、POP や IMAP といったプロトコルが定義されています。
3. メールをクライアント側でユーザーに表示する役割(MUA)
MUA(mail user agent):メールユーザーソフトです。ブラウザで動作するものだったり、PC にインストールして使うものだったりと、さまざまです。有名どころとしては、outlook などがあげられるでしょう。 MRA にメールが欲しいという指示を出して、返された結果を受け取って表示します。ここでの通信方法として、POP や IMAP といったプロトコルが定義されています。 一般的に、SMTP の設定すれば送信も可能です。
4. MRA と MUA の通信方法を規定するプロトコル(POP3/IMAP4)
よく挙げられるものとして、POP3(Post Office Protocol version 3)と IMAP4(Internet Message Access Protocol version 4)という二種類があります。 どちらも MRA と MUA 間の通信方法を規定します。が、違いもあります。 POP3 は、サーバーにあるメールを取り出して、自分の環境にすべてダウンロードします。既にダウンロードしたメールに関しては、当然ですがオフラインで見ることができます。また、既読などのデータは、MUA 側で管理します。場合によっては、ダウンロードしたメールをサーバーから削除することで、サーバー側の容量の削減にもなるでしょう。 一方で、IMAP は都度サーバーからデータを取得します。また、既読などのデータはサーバー側で管理します。そのため、複数デバイスで同じメールアカウントを使う場合は、デバイス間の同期が容易です。 スマホなどで複数デバイスの使用が一般的になった現在では、IMAP を使うことが多いです。

参考記事として、POP と IMAP の違い(by 筑波大学)を置いておきます。大学が出してる情報なので正確でしょう。
5. 具体例で見てみる:ブラウザを使ったメールのやり取り
必要な役者は揃いました。なので、具体例で見てみます。自分の理解を確かめながら見てください。
hoge@example.com から fuga@dummy.net にメールを送ることを考えます。ただし、送信者、受信者ともにブラウザ上で操作をすることとします。
hoge@example.comのユーザーがブラウザでメール送信ボタンを押すhoge@example.comユーザーのブラウザが、SMTP を使って、example.comサーバーに送信命令を出す- 「具体例で見てみる 異なるサーバー間でのメール配送」と同じ要領で
dummy.netサーバーにメールが届き、MDA によって所定のフォルダに配送される。 fuga@dummy.netユーザーがブラウザでメールを閲覧する。- MUA であるブラウザが、IMAP/POP のプロトコルに従って、
dummy.netの MRA にメールを送るように指令をだす。 dummy.netの MRA は、IMAP/POP のプロトコルに従って、fuga@dummy.netユーザーのブラウザにメールデータを返す。fuga@dummy.netユーザーのブラウザがメールを表示する。
