通常、WEBMAIL の実装には mailto.exe の CGI を使用し、HTML ファイルに「< form action="mailto:email address" method=post >」ステートメントを記述するか、WINDOWS API 関数を呼び出します。 WINDOWS API を使用する場合と、HTML ファイルに「< form action="mailto:email address" method=post >」ステートメントを記述する場合はどちらも、ユーザーのブラウザに EXCHANGE、OutlookEXPRESS、OUTLOOK などのソフトウェアを読み込む必要があります。ブラウジング サーバーは MAILTO ステートメントをサポートしていません。 CGI を使用して WEBMAIL を実装する場合、ユーザーのブラウザに要件はありませんが、効率的ではありません。 CGI テクノロジーは徐々に ISAPI/NSAPI テクノロジーに置き換えられています。この記事では、ISAPI テクノロジを使用した WEBMAIL の実装について説明します。
Delphi 4 を使用して Web サーバー プログラムを開発するのは非常に簡単です。Delphi 4 は、Web サーバー プログラムの開発をサポートする多数のコンポーネントとオブジェクトを提供します。 以下は、DELPHI を使用してユーザー入力に応答する ISAPI WEBMAIL プログラムを開発する方法の例です。送信サーバーに登録されているユーザーのみがブラウザ経由でメールを送信できます。簡単にするために、プログラムは送信データの機密性を提供しません。
まず、データベース エンジン dbe を WEB サーバーにインストールし、ユーザー名とユーザー パスワードを含むデータベース ファイル user.db を指すデータベース エイリアス yh を設定します。次に、2 つの HTML ファイルを作成し、それぞれ dl.html、qd.html という名前を付け、WEB サーバーのデフォルトのディレクトリ (例: C: INETPUBWWWROOT) に配置します。
dl.htmlの内容は以下の通りです。
<html>
< head >< title >電子メール送信システム</ /title >< /head >
<本文>
<h1>メール送信システム</h1>
< p > ユーザー名とパスワードを入力してください。 < /p >
< フォームメソッド="ポスト" アクション="/scripts/xsmd" >
< p >ユーザー名: < input type="text" length=10
名前="ユーザー名" >
パスワード: < input type="passWord"
length=10 name="パスワード" >< /p >
< p >< input type="submit" value="OK" >
< input type="reset" value="Clear" >< /p >
< /form >
< /body >
< /html >
qd.html ファイルの内容は次のとおりです。
< html >< head >< title >フォームに記入してください</ /title >< /head >
<本文>
< フォームメソッド = "投稿" アクション = "フィードバック" >
< p >受信メールアドレス:toaddress:を入力してください。
< input type="text" length=20
name=”toaddress” >< /p >
< p >件名を入力してください。 < 入力タイプ = "テキスト"
length=20 name="件名" >< /p >
<p>内容:</p>
< p >< input type="textarea" length=40
width=40 name=”body” >< /p >
< p >< input type="submit" value="OK" >
< input type="reset" value="Clear" >< /p >
< /form >
< /body >
< /html >
DELPHI で新しい ISAPI ベースの WEB SERVER アプリケーションを作成し、nmsmtp1、query1、および pageProducer1 を手動で追加します。
その中には、pageProducer1 のプロパティ: htmlfile: c:inetpubwww.rootqd.html があります。 nmsmtp1 のプロパティ:host (送信メール サーバーのアドレス) は、ここでは smtp.netease.com です。ポート:25。 グローバル変数は次のとおりです: sername:string;flag:boolean;
パス /フィードバックを使用してアクション項目を追加します。コードは次のとおりです。
プロシージャ TWebModule1.WebModule1WebActionItem1
アクション(送信者: TObject;
リクエスト: TWebRequest;
TWebResponse; 処理される変数: ブール値);
変数数:整数;
S:文字列;
始める
クエリ1.close;
Query1.sql.clear;
S:='カウント(ユーザー名)を選択してください
user.db ここで username=”';
S:=s+request.contentfields.values['ユーザー名']+'"';
S:=s+' およびパスワード =”';
S:=s+request.contentfields.values['psword']+'"';
Query1.sql.add(S);
クエリ1.open;
query1.count=0の場合
次に、response.content:='< html >< head >< title >
< /title >< body >ユーザー名とパスワードが間違っています。再入力してください。
< /body >< /html >'
それ以外
ユーザー名:=request.contentfields.values['ユーザー名'];
Response.content:=pageProducer1.content;
終わり;
パス /sendmail を使用して別のアクション アイテムを追加します。
そのプログラムコードは次のとおりです。
プロシージャ TWebModule1.WebModule1Web
ActionItem2Action(送信者: TObject;
リクエスト: TWebRequest;
TWebResponse; 処理される変数: ブール値);
変数本体:文字列;
始める
フラグ:= true;
body:=request.contentfields.values['body'];
PageProducer1.htmldoc.clear;
PageProducer1.htmldoc.add('< html >< body >');
Nmsmtp1.postmessage.clear;
Nmsmtp1.postmessage.fromaddress:=ユーザー名+
'@netease.com';
Nmsmtp1.postmessage.from:=ユーザー名;
Nmsmtp1.postmessage.body.add(body);
Nmsmtp1.postmessage.toaddress.add
(request.contentfields.values['toaddress']);
Nmsmtp1.postmessage.subject:=
request.contentfields.values['件名'];
Nmsmtp1.connect;
flag=true の場合は、Nmsmtp1.sendmail を開始します。
nmsmtp1.discontent;終了
pageProducer1.htmldoc.add
('< /body >< /html >');
応答.コンテンツ:=ページプロデューサー1.コンテンツ;
終わり;
nmsmtp1 を増加させるイベントは次のとおりです。
プロシージャ TWebModule1.NMSMTP1Connect(送信者: TObject);
始める
pageProducer1.htmldoc.add
('< p >すでに送信メール サーバーに接続しています</p>');
終わり;
プロシージャ TWebModule1.NMSMTP1Connection
失敗しました(送信者: TObject);
始める
フラグ:=false;
pageProducer1.htmldoc.add
('< p >接続に失敗しました< /P >');
終わり;
プロシージャ TWebModule1.NMSMTP1ConnectionRequired
(処理される変数: ブール値);
始める
pageProducer1.htmldoc.add('< p >接続が必要です</p>');
終わり;
プロシージャ TWebModule1.NMSMTP1Failure(送信者: TObject);
始める
pageProducer1.htmldoc.add('< p >メールの送信に失敗しました</p>');
フラグ:=false;
終わり;
プロシージャ TWebModule1.NMSMTP1Header
Incomplete(処理された変数: ブール値;
hiType: 整数);
始める
pageProducer1.htmldoc.add('< p >ヘッドが不完全です</ /p >');
フラグ:=false;
終わり;
プロシージャ TWebModule1.NMSMTP1InvalidHost
(処理される変数: ブール値);
始める
pageProducer1.htmldoc.add('< p >
送信メール サーバー アドレスが無効です。</p>');
フラグ:=false;
終わり;
プロシージャ TWebModule1.NMSMTP1RecipientNot
見つかりました(受信者: 文字列);
始める
pageProducer1.htmldoc.add
('< p >受信した電子メール アドレスが正しくありません</p>');
フラグ:=false;
終わり;
プロシージャ TWebModule1.NMSMTP1Success(
送信者: TObject);
始める
pageProducer1.htmldoc.add('< p >
メールは正常に送信されました</ /p >');
終わり;
プロジェクトを sendmail.dpr として保存し、コンパイルして WEB サーバーの実行可能ファイル パス (c:intpubscripts など) に配置すると、HTML ファイル dl.htm のユーザー入力に応答できます。ユーザー名とパスワードが正しい場合は、メールアドレス、件名、内容を入力してメール送信画面に入ります。このプログラムは NT SERVER でのデバッグに合格しました。