亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? email 服務器的簡單實現.txt

?? 大量Delphi開發資料
?? TXT
字號:
Email 服務器的簡單實現 
湖南艾邦信息技術有限公司 
李岳梅 
---- 貴刊1999年7月26日《編程技巧》欄目刊登的《監視POP3信箱》一文介紹了直接調用WinSock函數來進行POP3網絡通信從而監視有無新郵件的方法。但我們知道從Delphi 3 開始,它自帶的控件中有基于Internet開發的控件。如果我們充分利用這些控件開發Internet程序則可以簡化編程工作,提高效率。鑒于目前POP3客戶端的軟件的種類繁多,(如Outlook Express,Foxmail 以及Web 方式下的各免費郵局),而服務器端(除Unix Email系統)很少公開原代碼,下面我就向大家著重介紹一下利用 Delphi 4中Internet控件組的TClientSocket 和TServerSocket 控件來實現 Email POP3服務器端。如果您理解了Email POP3服務器的構造,相信也可以依葫蘆畫瓢寫出Email SMTP服務器程序。在此基礎上加入多線程技術使服務器能同時處理多個客戶的連接請求,您就可以輕松地實現一個簡單的Email服務器了。 

---- 一. 設計思路 

---- Email 系統采用C/S 結構。當用戶想發送郵件時或收取郵件時在客戶機上運行任意一個客戶端程序,如Foxmail。在菜單’工具->選項’的郵件服務器里填上運行我們服務器程序的主機名。服務器主機24小時一直運行我們的服務器端程序,SMTP和POP3服務器程序分別在25端口和110端口偵聽連接請求。當用戶發信時,首先客戶端會與服務器端建立Socket連接。然后開始一應一答的Client/Server間的通信。發信和收信時建立連接后服務器端分別要發送一個’250 OK’ 和’+OK pop3 server is ready ’的應答。客戶端收到此應答后開始發送SMTP或POP3命令。POP3通信時一般最開始的命令是’user ‘和’pass’或’ apop’用以進行身份驗證。注意由于POP3會話有3個狀態,某些命令只在某特定狀態下有效。當用戶進行完所有的操作后發送一個’quit’命令。服務器端收到此命令即終止此次socket連接并繼續偵聽其他的連接請求。注意:POP3通信時客戶端在Transaction狀態下’quit’則進入update狀態。如果從Authorization狀態下’quit’則終止通信,而不進入Update狀態。如果客戶端不通過’quit’命令終止連接,POP3會話不會進入Update狀態。而只有在Update狀態下收到’quit’命令后服務器才會在斷連前把標志為已刪的郵件進行物理刪除。 

---- 二. 代碼實現(以POP3為例) 

---- 自定義TPOP類的描述: 

 SessionState = ( Init,Authorization, Transaction,Update);
 TPop=class (TComponent)
  public
     UserName:string;//Email帳戶名
     PassWord:string; //Email口令
     ReceText:Pchar;  //server端收到的字符串
     PopState:SessionState;  
//pop狀態:
init or authorization or transaction  or update
     MsgCount:integer; //郵件總數
     SizeCount:integer;  //郵件總大小
     ReplyString:string;//服務器端發送的應答信息
     DeleIndex:byte;//用戶要刪的郵件序號
     ListIndex:byte;//list方法 的參數:
用戶要列出的序號為listindex的郵件信息
     RetrIndex:byte;//retr方法的參數:
用戶要取序號為retrindex的郵件
     TopIndex:byte; //top方法的參數
     QuitFlag:boolean;//用戶如果通過quit命斷連則此變量為true;
反之(此時要把f_dele都置回0)
     OldMsgCount:integer;//舊郵件數:Last 命令返回
     //郵件頭的各個域 
     HMsgId:string;
     HReplyTo:string;
     HDate:string;
     HFrom:string;
     HTo:string;
     HSubject:string;
     HMIME_Ver:real;
     HContent_Type:string;
     HContent_Transfer_Encoding:string;
     HText:string;
    //所有POP3服務器必須支持的命令
    procedure user;
    function pass:boolean;
    procedure stat;
    procedure dele;
    procedure list;
    procedure retr;
    procedure noop;
    procedure rset;
    procedure aquit;
    procedure tquit;
    //擴展的可選擇實現的POP3 命令
   procedure top;
   procedure last;
   procedure apop;
   procedure uidl;
   end;

---- 1. 建立連接 

---- 我們可以看到利用了Tclientsocket后客戶端請求建立連接只需下面的代碼。 

with ClientSocket do
      begin
        Host := Server;
        Active := True;
      end;

---- 服務器端利用TserverSocket,一直在偵聽110端口,若客戶端有連接請求,則ServerSocketAccept事件會被激活,建立起連接。 

procedure TMyForm.ServerSocketAccept(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   Statusbar1.Panels[0].Text :=
   '連接到 ' + Socket.RemoteAddress;
  //pop對象初始化
  pop:=TPop.Create(nil);
  pop.PopState:=init;
  pop.LoginResult:=false;
  pop.QuitFlag:=false;
  ServerSocket.Socket.Connections[0]
  .sendtext('+OK ibonc pop3 server is ready'+crlf);

end;

---- 2. 通信 

---- 服務器端收到客戶端發來的信息,則會激活ServerSocketClientRead事件,通過ServerSocket的Socket.ReceiveText可以得到信息的內容。 

procedure TMyForm.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var temp_command :string; 
//存放接收到的命令行,并做去crlf的處理
begin
 temp_command:=Socket.ReceiveText;
 //to remove the crlf in command line
 temp_command:=trim(copy(temp_command,1,
pos(crlf,temp_command)-1));   
 pop.ReceText:=pchar(temp_command);
 if  pop.popstate=init then
    if  strLIComp(pop.ReceText,'user ',5)=0 then
       pop.user
    else
       ServerSocket.Socket.Connections[0]
.sendtext('-ERR user name please')
 else if pop.popstate=authorization then
    begin
         if strLIComp(pop.ReceText,'pass ',5)=0 then
               pop.pass 
         else if strIComp(pop.ReceText,'quit')=0  then
               pop.aquit
             else
               ServerSocket.Socket.Connections[0]
.sendtext('-ERR pass word please');
    end
 else if pop.popstate=transaction then
     begin
          if  strIComp(pop.ReceText,'stat')=0  then
              pop.stat   
          else if strLIComp(pop.ReceText,'dele ',5)=0 then
              pop.dele
          else if strLIComp(pop.ReceText,'list',4)=0 then
              pop.list
          else if strLIComp(pop.ReceText,'retr ',5)=0 then
              pop.retr
          else if strIComp(pop.ReceText,'noop')=0 then
              pop.noop
          else if strIComp(pop.ReceText,'rset')=0 then
              pop.rset
          else if strIComp(pop.ReceText,'quit')=0 then
              pop.tquit
          else if strIComp(pop.ReceText,'last')=0 then
              pop.last
          else if strLIComp(pop.ReceText, 'apop ',5)=0 then
              pop.apop
          else if strLIComp(pop.ReceText, 'uidl ',5)=0 then
              pop.uidl
          else
              ServerSocket.socket.connections[0]
.sendtext('-ERR no such command yet'+crlf);
          end
end;

---- 3. 關閉連接 

   procedure TMyForm.ServerSocket
ClientDisconnect(Sender: TObject;
        Socket: TCustomWinSocket);
   begin
     ServerSocket.Active := False;
     //如果client端沒有通過quit 命令斷連,
     則在斷連時要把那些f_dele置為0
     if pop.QuitFlag=False then
       begin
         MyForm.query11.Close;
         MyForm.query11.Params[0].Asstring:=pop.UserName;
         MyForm.query11.prepare;
         MyForm.query11.execsql;
       end;
   end;

---- 三. 結語 

---- 由于Email系統與數據庫表結構的緊密聯系,筆者沒有寫出各POP3命令的具體實現。相信讀者在認真閱讀了RFC1939之后不難寫出實現函數。現在就動手為你的公司寫一個自己的Email服務器吧! 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合久久综合亚洲| 国产剧情在线观看一区二区| 91成人看片片| 91精品国产全国免费观看| 一区二区三区在线播放| 色婷婷国产精品综合在线观看| 亚洲视频图片小说| 欧美色爱综合网| 麻豆精品视频在线观看视频| 久久久久久久久岛国免费| 丰满白嫩尤物一区二区| 亚洲三级电影全部在线观看高清| 色综合天天综合网天天看片| 亚洲电影视频在线| 日韩免费观看高清完整版| 国产白丝网站精品污在线入口| 国产精品色噜噜| 欧美日韩中文字幕一区二区| 麻豆精品久久精品色综合| 亚洲国产高清不卡| 精品视频一区 二区 三区| 加勒比av一区二区| 亚洲人成7777| 日韩一区二区在线观看视频 | 欧美激情一区在线观看| 国产ts人妖一区二区| 成人免费一区二区三区视频| 欧美放荡的少妇| 国产九色精品成人porny | 一区二区理论电影在线观看| 欧美一区三区四区| 成人听书哪个软件好| 天堂va蜜桃一区二区三区| 国产喷白浆一区二区三区| 欧美性猛片xxxx免费看久爱| 国产乱人伦偷精品视频不卡 | 日韩精品欧美精品| 国产精品久久久久久久久动漫| 欧美乱熟臀69xxxxxx| 不卡一二三区首页| 老司机精品视频导航| 亚洲黄色免费网站| 国产精品乱子久久久久| 久久久午夜精品理论片中文字幕| 99精品国产91久久久久久| 久久99精品国产麻豆不卡| 亚洲在线视频一区| 亚洲色图.com| 国产欧美视频一区二区三区| 日韩欧美国产一二三区| 在线观看日韩高清av| 99久久99久久免费精品蜜臀| 国产精品中文字幕日韩精品| 日本视频免费一区| 亚洲成在人线在线播放| 亚洲精品视频观看| 国产精品超碰97尤物18| 国产性天天综合网| 精品免费视频.| 欧美一区二区三区思思人 | 欧美久久婷婷综合色| 91在线高清观看| av中文字幕一区| 不卡区在线中文字幕| 国产成人在线看| 国产在线精品不卡| 韩国精品免费视频| 日韩亚洲国产中文字幕欧美| 天天亚洲美女在线视频| 中文字幕亚洲成人| 久久久国产午夜精品| 久久只精品国产| 精品国产乱码久久久久久牛牛| 欧美狂野另类xxxxoooo| 欧美日韩成人在线| 在线不卡免费欧美| 91精品国产色综合久久| 555www色欧美视频| 欧美一区二区三区四区久久| 欧美精品一级二级三级| 91精品国产综合久久婷婷香蕉| 欧美欧美欧美欧美| 欧美一级专区免费大片| 日韩欧美区一区二| 88在线观看91蜜桃国自产| 91精品视频网| 久久综合色婷婷| 中文字幕 久热精品 视频在线| 日韩视频一区二区在线观看| 欧美日韩二区三区| 日韩三级高清在线| 久久久国产一区二区三区四区小说| 国产丝袜美腿一区二区三区| 中文字幕一区视频| 亚洲最色的网站| 水野朝阳av一区二区三区| 美日韩黄色大片| 成人涩涩免费视频| 色爱区综合激月婷婷| 91精品国产乱码| 国产日韩欧美a| 一区二区三区在线视频观看 | 蜜桃视频一区二区三区| 国产毛片精品视频| 99国产精品国产精品久久| 欧美性一区二区| 欧美不卡123| 亚洲精品自拍动漫在线| 日韩精品亚洲一区二区三区免费| 久久国产精品第一页| 成人av电影在线播放| 精品婷婷伊人一区三区三| 久久久久久久久久美女| 亚洲精品国久久99热| 成人天堂资源www在线| 91在线观看成人| 91精品国产综合久久久蜜臀粉嫩 | 亚洲精品一区二区三区福利| 国产性天天综合网| 亚洲一级电影视频| 国产精品亚洲午夜一区二区三区| 91浏览器在线视频| 欧美草草影院在线视频| 亚洲欧美一区二区三区国产精品 | 国产精品视频线看| 日韩av电影免费观看高清完整版 | 午夜久久久久久久久| 国产精品一区二区久久不卡| 欧美亚洲综合色| 国产精品私人影院| 久久国产精品99久久人人澡| 色88888久久久久久影院野外| 国产亚洲一区二区三区四区| 亚洲成人自拍一区| 99视频一区二区| 国产视频一区二区三区在线观看| 午夜精品久久久久久久久| 白白色亚洲国产精品| 久久久91精品国产一区二区精品 | 欧美一级高清片| 国产三级三级三级精品8ⅰ区| 亚洲永久免费av| 成人av免费在线播放| 精品国产乱码91久久久久久网站| 香蕉成人啪国产精品视频综合网| 成人福利电影精品一区二区在线观看| 欧美高清视频不卡网| 亚洲精品成人在线| av中文字幕一区| 国产精品女同互慰在线看| 国内欧美视频一区二区 | 精品国产伦一区二区三区观看方式 | 亚洲成人免费电影| 成人性生交大片免费| 精品福利一区二区三区 | 亚洲综合成人在线视频| 91在线视频播放| 国产午夜精品美女毛片视频| 国产一区 二区 三区一级| 精品国产乱子伦一区| 九色|91porny| 久久先锋影音av| 国产一区二区久久| 国产日本欧洲亚洲| 国产乱对白刺激视频不卡| 精品福利av导航| 国产精品99久久久| 中文子幕无线码一区tr| 成人h动漫精品| 亚洲美女免费在线| 欧美日韩三级一区二区| 亚洲成人av电影| 欧美一级高清大全免费观看| 九九久久精品视频| 国产人妖乱国产精品人妖| 成人黄色在线网站| 久久精品夜色噜噜亚洲a∨| 国产一区二区三区四区在线观看 | 欧美日韩亚洲综合| 亚洲观看高清完整版在线观看| 欧美乱熟臀69xxxxxx| 麻豆免费精品视频| 亚洲国产岛国毛片在线| 色香蕉久久蜜桃| 五月天国产精品| 国产亚洲一区二区三区四区| 99re这里都是精品| 五月天国产精品| 国产午夜亚洲精品午夜鲁丝片| 97久久人人超碰| 首页国产欧美久久| 久久久精品免费观看| 色婷婷久久一区二区三区麻豆| 亚洲成人www| 国产欧美日韩在线看| 91成人国产精品| 国产制服丝袜一区| 亚洲精品国产无套在线观| 3d动漫精品啪啪1区2区免费| 国产一区二区三区黄视频|