程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi開發WEBMAIL程序

Delphi開發WEBMAIL程序

編輯:Delphi
實現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:INETPUBWWWROOT)。
  
  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:inetpubwww.rootqd.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:intpubscripts),即可響應Html文件dl.htm的用戶輸入,並且如果用戶的用戶名及密碼正確則可進入發送郵件的頁面,用戶填寫接受郵件地址及主題、內容後即可發送郵件
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved