SMTPサーバーを作る−その1− 作ればわかるアプリケーション の動作とメカニズム 秋月巌ソリューション事務所 第 9回 秋月 巌 SMTPサーバーを作る−その1− AKIZUKI, Iwao http://www.akizuki.co.jp/ SMTPサーバー のプロトタイプ きるだけで、実際のメール送信は を無視すればいい。 まだできない。通信部分は、前回 とはいえ、AMTサーバーは非同 紹介した非同期サーバープログラ 期マルチスレッドプログラムとして 今回から、SMTPサーバーを作 ムテンプレートで あるAMT サー 実装されている都合上、かなり複 る。今回のサンプルはまだメールク バーを利用する。だから、通信部 雑な処理になってしまっているの ライアントプログラムと対話がで 分のプログラミングに関しては、前 で、それを理解するには2005年11 回までの記事を参考にしてほしい。 月号・12月号の本連載の記事が参 この記事で は、あくまで S M T P 考になるだろう。 Level 1 2 3 4 5 サーバー固有の実装についてのみ 説明する。 プログラムはテンプレートであ メールサーバーと メールクライアント Technology Tools る AMT サーバーのイベントプロ Visual Basic シージャに記述するが、AMTサー SMTPサーバーの動作に関して Visual C# バーは.NET Frameworkの非同期 は、漠然と理解している人も多い Socket通信のアーキテクチャをそ だろう。実を言えば、私もこの記事 のまま踏襲しているので 、AMT のサンプルを書き始めるまで は、 サーバーを利用せずに、普通にプ そうだった。で、実際にSMTPサー ログラムを記述した場合と比べて バーを作ってみて、事前に漠然と あまり変わらない。だから、.NET 理解していた通りだったことを確 Frameworkの非同期Socket通信の 認した。 Visual C++ SQL Server Oracle Access ASP.NET Other: Samples この記事で取り上げたソースコードおよび サンプルプログラムは、 http://www.shoeisha.com/mag/windev/ からダウンロード可能です。 知識があるならば、AMTサーバー メール通信には複雑な文字コー を使用して実装しているというこ ドの問題がある。少し前まで、よ とを無視してプログラムを読んで く文字化けしたメールを受け取っ も、ほとんど問題がないはずであ た人も多いだろう。しかし、それは る。処理を記述していないイベン メールクライアントの問題であっ トプロシージャがあるので、それ てSMTPサーバーには関係がない。 2006 January 147 .NET Framework で作る Windows サーバー 作ればわかるアプリケーションの動作とメカニズム 単に、クライアントから受け取ったテキスト文字列を、 サーバーでもありクライアントでもあるという意味で、 ほとんど、そのまま別のサーバーに転送するだけである。 SMTPサーバーはP2Pアプリケーションだということも 添付ファイルのようなバイナリファイルもメールクライ できる。それぞれのサーバーが、別のサーバーに対して アントがテキスト文字列化しているから、メールサー クライアントとなる構図は、P2Pアプリケーションの場 バーは何もする必要がない。テキスト文字列化されたバ 合と同じである。つまり、SMTPサーバーはSMTPサー イナリファイルを元のバイナリファイルに戻すのも、も バー間で、P2Pネットワークを形成する。 ちろんメールクライアントの仕事である。Webサーバー 通常のP2Pアプリケーションとの違いは、その各サー とWebブラウザの関係同様、メールの場合もサーバープ バーに対して、メールクライアントというクライアント ログラムのほうがよっぽど簡単なのである。 専用の端末が接続されることである。このメールクライ アントとSMTPサーバーの関係は純然たるクライアン SMTPサーバーは DNSクライアントである ト/サーバーシステムである。つまり、P2Pネットワー ところで、メールサーバーはメールアドレスのドメイ いうことになる。WWW(ワールドワイドウェブ)は各 ン部分から、送信先のSMTPサーバーを検出するために Webサーバーに保持されているコンテンツが、他のサー DNSサーバーに照会する必要がある。メールアドレスの バーへのリンクを持つことがあるが、サーバー同士は通 「@」マーク以降は、あくまでドメイン名であり、それだ 信し合わない。Webサーバー同士が通信し合えば、何か けでは送信先のSMTPサーバーが特定できないからであ おもしろいことができるのではないかと考えてみたが、 る。そこで、SMTPサーバーはDNSクライアントとなっ とりあえず、いまは新しいアイデアは思いつかない。ロ て、DNSサーバーに登録されているMXレコードを検索 ボット型検索エンジンは、ある意味ではWebクライアン する必要がある。 ト機能を備えたWebサーバーということができるかもし クの各ホストに、複数のメールクライアントがぶら下 がっているのが、メール通信のためのネットワークだと で、その方法を調べていて初めて知ったのだが、DNS れない。もちろん、ロボット型検索エンジンは、イン クライアントが DNS サーバーに問い合わせる場合、 ターネットの歴史の中でもとくにすぐれたアイデアのひ HTTPやSMTPのようにテキストベースで対話をしてい とつのわけだから、やはり、Webサーバー同士が通信す るわけではなく、 「DNSパケット」と呼ばれるバイナリ れば、他にも何か、興味深いことができそうである。 データでやり取りをする。この部分は、事前に私がイ Webネットワークが分散処理ネットワークだというこ メージしていたものとは異なっていた。だから、当初は とは、今までにも何度も書いてきた。リンクひとつで負 DNSサーバーとの対話方法を調べていて、そのためのコ 荷を別のサーバーに分散することができる。しかし、そ マンドをインターネットで検索しても、なかなか見つか の場合も通信処理自体はあくまでも常にWebブラウザ らないのを不思議に感じていた。ちなみにこの部分は、 が中心である。Webサーバーが Webクライアントにな サンプルプログラムではまだ実装されていないし、今後、 ることはない。 実装するかも未定である。 SMTPサーバーは P2Pアプリケーションである SMTPサーバーはサーバーアプリケーションであると メールサーバーのための 新しいアイデアはないか ところで、せっかくSMTPサーバーを作るのだから、 通常にはない新しい機能を付け加えたいと思うのだが、 同時に、SMTPクライアントでもある。メールクライア これもとくに新しいアイデアが浮かばない。ポストペッ ントから受け取ったデータを、相手先のSMTPサーバー トは興味深いアイデアだったが、あれはメールクライア に接続して送信するときはクライアントプログラムとし ントの機能である。HTMLページを配信するだけだった て動作するからである。ひとつのアプリケーションが Webサーバーが進歩して、Webアプリケーションを開発 148 Windows Developer Magazine
© Copyright 2024 Paperzz