實現WEBMAIL |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
通常,實現WEBMAIL采用mailto.exe的CGI、在HTML文件中寫入“< form action="mailto:電子郵箱地址" method=post >”語句或者調用WINDOWS API函數。采用WINDOWS API 和在HTML文件中寫入“< form action="mailto:電子郵箱地址" method=post >”語句都要求用戶的瀏覽器裝入EXCHANGE、 OUTLOOKEXPRESS、或OUTLOOK等軟件,而且還有一些瀏覽器不支持MAILTO語句。而采用CGI的形式實現 WEBMAIL對用戶的瀏覽器沒有要求,但效率不高。CGI技朮正在逐漸被ISAPI/NSAPI技朮所取代。本文就來討 論一下采用ISAPI技朮實現WEBMAIL。 使用Delphi 4開發Web Server程序是非常簡單的,Delphi 4中提供了大量的元件和對象,支持Web Server 程序的開發。 下面通過一個例子來介紹如何利用DELPHI開發一個響應用戶輸入的ISAPI的WEBMAIL程序。只 有在發送服務器上注冊的用戶才能通過在瀏覽器發送郵件。為了簡單,程序沒有對傳送的數據提供保密。 首先,在WEB服務器端安裝數據庫引擎dbe,并設置好數據庫別名:yh,指向一個包含用戶名和用戶密碼的數據 庫文件user.db。接著建立兩個HTML文件,名字分別為:dl.html,qd.html,放在WEB服務器的缺省目錄下 (如:C:\INETPUB\WWWROOT)。 dl.html的內容如下: < html > < head >< title > 發送郵件系統< /title >< /head > < body > < h1 >發送郵件系統< /h1 > < p > 請輸入您的用戶名及密碼。< /p > < form method=”post” action="/scripts/xsmd" > < p >用戶名:< input type="text" length=10 name="username" > 密碼:< input type="password" length=10 name="password" >< /p > < p >< input type="submit" value="確定" > < input type="reset" value="清除" >< /p > < /form > < /body > < /html > qd.html文件內容如下: < html >< head >< title >填表< /title >< /head > < body > < form method=”post” action="feedback" > < p >請填入接收郵件地址:toaddress: < input type=”text” length=20 name=”toaddress” >< /p > < p >請填入主題。< input type="text" length=20 name="subject" >< /p > < p >內容:< /p > < p >< input type=“textarea”length=40 width=40 name=”body” >< /p > < p >< input type="submit" value="確定" > < input type="reset" value="清除" >< /p > < /form > < /body > < /html > 在DELPHI中新建一個基于ISAPI的WEB SERVER APPLICATION,手動增加nmsmtp1,query1,pageproducer1 。 其中:pageproducer1的property: htmlfile:c:\inetpub\www.root\qd.html。nmsmtp1的 property:host(發送郵件服務器的地址。)在這里為smtp.netease.com.。port:25。 全局變量為: sername:string;flag:boolean; 增加一個路徑為/feedback的動作項,其代碼如下: procedure TWebModule1.WebModule1WebActionItem1 Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); Var Count:integer; S:string; Begin Query1.close; Query1.sql.clear; S:=’select count(username) from user.db where username=”’; S:=s request.contentfields.values[‘username’] ’”’; S:=s ’ and password=”’; S:=s request.contentfields.values[‘psword’] ’”’; Query1.sql.add(S); Query1.open; If query1.count=0 then response.content:=’< html >< head >< title > < /title >< body >用戶名、密碼不正確,請重新輸入 < /body >< /html >’ Else Username:=request.contentfields.values[‘username’]; Response.content:=pageproducer1.content; End; 再增加一個路徑為/sendmail 的動作項, 它的程序代碼如下: procedure TWebModule1.WebModule1Web ActionItem2Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); Var body:string; Begin Flag:=true; body:=request.contentfields.values[‘body’]; Pageproducer1.htmldoc.clear; Pageproducer1.htmldoc.add(‘< html >< body >’); Nmsmtp1.postmessage.clear; Nmsmtp1.postmessage.fromaddress:=username ’@netease.com’; Nmsmtp1.postmessage.from:=username; Nmsmtp1.postmessage.body.add(body); Nmsmtp1.postmessage.toaddress.add (request.contentfields.values[‘toaddress’]); Nmsmtp1.postmessage.subject:= request.contentfields.values[‘subject’]﹔ Nmsmtp1.connect; If flag=true then begin Nmsmtp1.sendmail; nmsmtp1.disconntent;end pageproducer1.htmldoc.add (‘< /body >< /html >’); response.content:=pageproducer1.content; end; 增加nmsmtp1的事件如下: procedure TWebModule1.NMSMTP1Connect(Sender: TObject); begin pageproducer1.htmldoc.add ('< p >已經和發送郵件服務器連接< /p >'); end; procedure TWebModule1.NMSMTP1Connection Failed(Sender: TObject); begin flag:=false; pageproducer1.htmldoc.add ('< p >連接失敗< /P >'); end; procedure TWebModule1.NMSMTP1ConnectionRequired (var Handled: Boolean); begin pageproducer1.htmldoc.add('< p >要求進行連接< /p >'); end; procedure TWebModule1.NMSMTP1Failure(Sender: TObject); begin pageproducer1.htmldoc.add('< p >發送郵件失敗< /p >'); flag:=false; end; procedure TWebModule1.NMSMTP1Header Incomplete(var handled: Boolean; hiType: Integer); begin pageproducer1.htmldoc.add('< p >head不完整< /p >'); flag:=false; end; procedure TWebModule1.NMSMTP1InvalidHost (var Handled: Boolean); begin pageproducer1.htmldoc.add('< p > 發送郵件服務器地址無效< /p >'); flag:=false; end; procedure TWebModule1.NMSMTP1RecipientNot Found(Recipient: String); begin pageproducer1.htmldoc.add ('< p >接受郵件地址不正確< /p >'); flag:=false; end; procedure TWebModule1.NMSMTP1Success( Sender: TObject); begin pageproducer1.htmldoc.add('< p > 成功發送郵件< /p >'); end; 將project存為sendmail.dpr,編譯后放到WEB服務器的可執行文件路徑下(如:c:\intpub\scripts), 即可響應HTML文件dl.htm的用戶輸入,并且如果用戶的用戶名及密碼正確則可進入發送郵件的頁面,用戶填 寫接受郵件地址及主題、內容后即可發送郵件。此程序在NT SERVER上調試通過。
------
~~~Delphi K.Top討論區站長~~~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |