線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1693
推到 Plurk!
推到 Facebook!

實現WEBMAIL

 
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-02-26 22:46:33 IP:61.219.xxx.xxx 未訂閱
 
 通常,實現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討論區站長~~~
系統時間:2024-07-30 10:44:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!