POP3サーバーを作る

POP3サーバーを作る
作ればわかるアプリケーション
の動作とメカニズム
秋月巌ソリューション事務所
11回
POP3サーバーを作る
第
今回、提供するPOP3サーバーは、
前号までのSMTPサーバーサンプ
ルプログラムで送受信したメール
メールクライアントプログラムは使
メッセージを、メールクライアント
用できない。SMTPサーバーと別
プログラムで読むためのものであ
のプロトコルの組み合わせでも同
る。メールの送受信を行なうネッ
じである。つまり、一般に普及し
トワークは、SMTPサーバーによる
てるメールクライアントプログラム
P2Pネットワークに、クライアン
を使用する以上、SMTP とPOP 3
ト/サーバー型のネットワークが
(もしくはIMAP4)の組み合わせは、
ぶらさがっているものであるとい
Level
2
AKIZUKI, Iwao
http://www.akizuki.co.jp/
メールクライアント
にデータを配信する
POP3サーバー
1
秋月 巌
3
4
5
う話は以前にした。POP3サーバー
とメールクライアントによって構成
されるネットワークは、このクライ
Technology Tools
アント/サーバー部分に相当する。
Visual Basic
このあたりのことは、知識のある
Visual C#
Visual C++
SQL Server
Oracle
Access
ASP.NET
Other:
Visual Studio .NET 2003
Samples
この記事で取り上げたソースコードおよび
サンプルプログラムは、
http://www.shoeisha.com/mag/windev/
からダウンロード可能です。
変えられないということになる。
人にとっては当たり前のことだが、
SMTPと
POP3(IMAP4)
以外の組み合わせ
とはいえ、たとえば Webメール
案外と知らない人も多い。SMTP
はSMTPとHT TPの組み合わせで
とPOP3 は独立したプロトコルだ
ある。POP3サーバーとメールクラ
が、事実上、共存関係にある。と
イアントが担当するクライアント
はいえ、この組み合わせしか許され
サーバー部分を Web サーバーと
ないわけではない。この連載で作っ
Webブラウザが処理する。メール
ているメールサーバーもSMTPサー
クライアントプログラムの代わりに
バーとPOP3サーバーの組み合わせ
Webブラウザを使うからPOP3(I
のわけだが、POP3サーバーと別の
MAP4)以外のプロトコルが使用
プロトコルの組み合わせで、メー
できるのである。そう考えると、普
ルサーバーを作ることもできる。と
及しているいろんな通信クライア
はいえ、その場合、IMAP4との組
ントとSMT Pの組み合わせでメー
み合わせを別にすれば、普通の
ルのやり取りができるということ
2006 March 137
.NET Framework で作る Windows サーバー
作ればわかるアプリケーションの動作とメカニズム
に考えが及ぶ。
る。もともとSMTPサーバーとPOP3サーバーは独立し
たとえば、インスタントメッセンジャーで直接メール
たプログラムなので、SMTPサーバーが受信して処理し
を受信できるメールサーバーを作ることは簡単そうであ
たメールデータをPOP3サーバーが扱うには、データの
る。とはいえ、インスタントメッセンジャーからメール
移行処理が必要な場合がある。しかし、このサンプル
を送信するのはいくつかの問題がある。通常、インスタ
メールサーバーは、SMTPサーバーとPOP3サーバーが
ントメッセンジャーのデータ送信はフリーフォーマット
Jetデータベースエンジンを使って同じデータベースにア
なので、メールアドレスや件名を記述する部分が用意さ
クセスすることで、移行処理を不要としている。
れていない。だから、インスタントメッセージクライア
ントプログラムに、これらを記入する部分を用意する必
要がある。メールが直接受信できるインスタントメッセ
ンジャーというのはなかなか便利そうである。現在でも
サンプルプログラムの
実行方法
msn(Windows)メッセンジャーは、Hotmailと統合さ
まずSMTP Serverフォームの[Start]ボタンをクリッ
れているが、これはあくまでメッセージの着信がメッセ
クしてSMTPサーバーを実行し、別のコンピュータで起
ンジャーによって通知されるだけで、メールを読むには
動したサンプルメールサーバーからメールを受信する。
Webブラウザを起動しなければならない。
続いてPOP Serverフォームにユーザー名とパスワードを
Webメールにしても、POP3メールにしても、メール
登録する。最後にPOPフォームの[Start]ボタンをク
を取りに行かないとメールが届いていることを知ること
リックしてPOP3サーバーを実行し、メールクライアン
ができない。どちらもサーバーとクライアントが常時接
トソフトでメールをダウンロードする。
続されていないからである。インスタントメッセンジャー
なお、フォームにある設定項目である「スレッド数」
でメールも受信できれば、リアルタイムで応答すること
を「1」以外にすると、.NET Framework 1.1/2.0環境で
ができる。とくに今日のように携帯電話メールとのやり
はエラーが 発生するのを確認した。.NET Framwork
取りがあることを考えれば、このメリットは大きい。
1.1/2.0環境で試す場合は「1」を指定してほしい。
前号までのSMTPサーバーに
POP3機能を追加
さて、今回のサンプルメールサーバーでは、前号まで
POP3サーバーの機能だけ試す方法
上記の方法では、2台のコンピュータでサンプルメー
ルサーバーを実行し、2つ以上のメールクライアントプ
ログラムを設定する必要が ある。そこで 1 台のコン
のSMTPプログラムのプロジェクトに新しくPOP3サー
ピュータで POP3サーバーの動作を確認できるように、
バー用のフォームを追加した(図1)
。プログラムを実行
サンプルデータがデータベースに登録されている。その
すると、SMTPサーバーのウィンドウとPOP3サーバー
メールデータをメールクライアントで受信するためには、
のウィンドウが起動する。SMTPサーバー部に変更はな
い。だから、前号同様メールを送信するときにはメール
アドレスのドメイン部にIPアドレスを指定しなければな
らない。よって、インターネット経由で、このメール
サーバー同士でメールのやり取りをすることはできる
が、通常のインターネットメールに参加することはでき
ない。あくまで実験的に動かせるだけだと考えてほしい。
SMTPサーバーがDNSクライアント機能を備えていない
からである。
このサンプルメールサーバーでは、受信したメール
データをSMTPサーバーとPOP3サーバーで共有してい
138 Windows Developer Magazine
図1:POP3サーバー機能を備えたフォーム