在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

Email 服務器的容易完成

Email 服務器的容易完成

更新時間:2022-04-29 文章作者:未知 信息來源:網絡 閱讀次數:

我們知道從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服務器吧! 

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 亚洲综合欧美在线| 欧美一级爱爱视频| 欧美亚洲一二三区| 久久www视频| 国产性生活免费视频| 亚洲国产精品影视| 免费成人黄色大片| 欧美性受xxxx黑人猛交88| 久久免费视频2| 中文字幕色呦呦| 国产女主播自拍| 久久久999免费视频| 99爱视频在线| www.天天射.com| 亚洲欧美天堂在线| 久久男人资源站| 国产最新免费视频| 亚洲一级片网站| 性生活免费观看视频| 黄色一级片黄色| 免费在线观看毛片网站| 免费看污污网站| gogogo免费高清日本写真| 五月天激情图片| 日本手机在线视频| 北条麻妃av高潮尖叫在线观看| the porn av| 国产情侣第一页| 北条麻妃av高潮尖叫在线观看| 中文字幕日韩综合| 水蜜桃色314在线观看| 91人人澡人人爽人人精品| 欧美h视频在线观看| 男女午夜激情视频| 永久av免费在线观看| 浮妇高潮喷白浆视频| 国产在线观看中文字幕| 毛片在线播放视频| 伊人五月天婷婷| 欧美色图另类小说| 99久热在线精品视频| 日本成人在线免费视频| 一二三在线视频| 九九九在线观看视频| 女人帮男人橹视频播放| 天堂网在线免费观看| 波多野结衣家庭教师在线播放| 在线观看免费视频污| 日韩福利视频在线| 久久国产亚洲精品无码| 日韩视频 中文字幕| 91精品999| 99草草国产熟女视频在线| 久操手机在线视频| 一区二区三区四区久久| 亚洲一区日韩精品| 91最新在线观看| 国产精品少妇在线视频| 亚洲熟妇av日韩熟妇在线| 免费一级淫片aaa片毛片a级| 精品国产无码在线| 久久久国产精华液999999| mm1313亚洲国产精品无码试看| 亚洲中文字幕无码av永久| 精品国偷自产一区二区三区| 日本黄网站色大片免费观看| 三级黄色片免费观看| 成人av毛片在线观看| 天天摸天天舔天天操| 日韩高清在线一区二区| 性鲍视频在线观看| 麻豆传媒网站在线观看| 欧美美女黄色网| 中文字幕在线乱| 无码av天堂一区二区三区| 国产www免费| 久久免费视频3| 国产天堂在线播放| 久久6免费视频| 中文字幕乱码免费| 中文字幕无码精品亚洲资源网久久| 久久久天堂国产精品| 水蜜桃色314在线观看| 777精品久无码人妻蜜桃| 日韩黄色片视频| 中国黄色片一级| 丰满人妻一区二区三区53号| 男女日批视频在线观看| 国产极品美女高潮无套久久久| 国产精品igao| 国产999免费视频| 欧美激情视频免费看| 亚洲色图38p| 成年人视频大全| 成人在线观看a| 国产盗摄视频在线观看| 少妇av一区二区三区无码| wwwwww.色| 精品少妇人欧美激情在线观看| 97视频在线免费播放| 色呦呦网站入口| 国产黄色特级片| 久久亚洲a v| 思思久久精品视频| 国产亚洲综合视频| 精品国产一区二区三区在线| 久久综合久久色| 国产一级片91| 国产欧美精品一二三| 国产成人无码精品久久久性色| 日韩高清在线一区二区| 国产xxxxx在线观看| 国产一区二区三区在线免费| 九热视频在线观看| 成熟丰满熟妇高潮xxxxx视频| 色呦色呦色精品| 妓院一钑片免看黄大片| 欧美深夜福利视频| 波多野结衣与黑人| 黄色一级片免费播放| 91香蕉视频导航| 少妇人妻互换不带套| 久久久性生活视频| 免费在线看黄色片| 真人做人试看60分钟免费| 99九九99九九九99九他书对| 日韩免费高清在线| 北条麻妃在线观看| 国产男女在线观看| 777久久久精品一区二区三区| 国产精品日韩三级| 性一交一乱一伧国产女士spa| 91视频福利网| 久久久一二三四| 熟女熟妇伦久久影院毛片一区二区| 伊人网在线综合| 手机免费av片| 婷婷激情小说网| 男女激烈动态图| 91成人综合网| 欧美日韩在线一| 茄子视频成人免费观看| 日本va中文字幕| 99热这里只有精品在线播放| 91看片就是不一样| 日日躁夜夜躁aaaabbbb| 一道本在线免费视频| 国产传媒免费观看| 特级西西444| 国产91在线视频观看| 精品视频无码一区二区三区| 亚洲视频一二三四| 亚洲欧美日韩不卡| 日本a视频在线观看| 三级在线免费看| 人人妻人人澡人人爽精品欧美一区| www.99riav| 国产免费观看高清视频| 孩娇小videos精品| 欧美日韩视频免费| 亚洲欧美另类动漫| 99中文字幕在线观看| 欧美日韩国产精品激情在线播放| 超碰在线公开97| 欧美国产综合在线| 天天操狠狠操夜夜操| 国产精品国产三级国产专区51| 成人在线观看黄| 成人污网站在线观看| 午夜免费福利在线| 东北少妇不带套对白| 亚洲黄色av片| 一区二区传媒有限公司| 日韩精品视频网址| 漂亮人妻被中出中文字幕| 一区二区三区日韩视频| 无码人妻丰满熟妇区毛片18| 奇米777在线| 日韩在线第三页| av免费观看网| 黄黄视频在线观看| 亚洲欧美偷拍另类| 虎白女粉嫩尤物福利视频| 国产乱人伦精品一区二区三区| 国产三级日本三级在线播放| 女人帮男人橹视频播放| 亚洲制服在线观看| 五月天视频在线观看| 国产av人人夜夜澡人人爽| 久草热视频在线观看| 日韩精品免费一区| 激情图片qvod| 日本特级黄色大片| 亚洲色图偷拍视频| 亚洲a级黄色片| 国产九九在线观看| 无限资源日本好片| 国产wwwxx| 欧美美女一级片| 午夜视频在线网站|