国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

Email 服務(wù)器的容易完成

Email 服務(wù)器的容易完成

更新時(shí)間:2022-04-29 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

我們知道從Delphi 3 開始,它自帶的控件中有基于Internet開發(fā)的控件。如果我們充分利用這些控件開發(fā)Internet程序則可以簡(jiǎn)化編程工作,提高效率。鑒于目前POP3客戶端的軟件的種類繁多,(如Outlook Express,Foxmail 以及Web 方式下的各免費(fèi)郵局),而服務(wù)器端(除Unix Email系統(tǒng))很少公開原代碼,下面我就向大家著重介紹一下利用 Delphi 4中Internet控件組的TClientSocket 和TServerSocket 控件來(lái)實(shí)現(xiàn) Email POP3服務(wù)器端。如果您理解了Email POP3服務(wù)器的構(gòu)造,相信也可以依葫蘆畫瓢寫出Email SMTP服務(wù)器程序。在此基礎(chǔ)上加入多線程技術(shù)使服務(wù)器能同時(shí)處理多個(gè)客戶的連接請(qǐng)求,您就可以輕松地實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Email服務(wù)器了。

一. 設(shè)計(jì)思路
Email 系統(tǒng)采用C/S 結(jié)構(gòu)。當(dāng)用戶想發(fā)送郵件時(shí)或收取郵件時(shí)在客戶機(jī)上運(yùn)行任意一個(gè)客戶端程序,如Foxmail。在菜單’工具->選項(xiàng)’的郵件服務(wù)器里填上運(yùn)行我們服務(wù)器程序的主機(jī)名。服務(wù)器主機(jī)24小時(shí)一直運(yùn)行我們的服務(wù)器端程序,SMTP和POP3服務(wù)器程序分別在25端口和110端口偵聽連接請(qǐng)求。當(dāng)用戶發(fā)信時(shí),首先客戶端會(huì)與服務(wù)器端建立Socket連接。然后開始一應(yīng)一答的Client/Server間的通信。發(fā)信和收信時(shí)建立連接后服務(wù)器端分別要發(fā)送一個(gè)’250 OK’ 和’+OK pop3 server is ready ’的應(yīng)答。客戶端收到此應(yīng)答后開始發(fā)送SMTP或POP3命令。POP3通信時(shí)一般最開始的命令是’user ‘和’pass’或’ apop’用以進(jìn)行身份驗(yàn)證。注意由于POP3會(huì)話有3個(gè)狀態(tài),某些命令只在某特定狀態(tài)下有效。當(dāng)用戶進(jìn)行完所有的操作后發(fā)送一個(gè)’quit’命令。服務(wù)器端收到此命令即終止此次socket連接并繼續(xù)偵聽其他的連接請(qǐng)求。注意:POP3通信時(shí)客戶端在Transaction狀態(tài)下’quit’則進(jìn)入update狀態(tài)。如果從Authorization狀態(tài)下’quit’則終止通信,而不進(jìn)入U(xiǎn)pdate狀態(tài)。如果客戶端不通過(guò)’quit’命令終止連接,POP3會(huì)話不會(huì)進(jìn)入U(xiǎn)pdate狀態(tài)。而只有在Update狀態(tài)下收到’quit’命令后服務(wù)器才會(huì)在斷連前把標(biāo)志為已刪的郵件進(jìn)行物理刪除。
二. 代碼實(shí)現(xiàn)(以POP3為例)
自定義TPOP類的描述:

SessionState = ( Init,Authorization, Transaction,Update);
TPop=class (TComponent)
public
UserName:string;//Email帳戶名
PassWord:string; //Email口令
ReceText:Pchar; //server端收到的字符串
PopState:SessionState;
//pop狀態(tài):
init or authorization or transaction or update
MsgCount:integer; //郵件總數(shù)
SizeCount:integer; //郵件總大小
ReplyString:string;//服務(wù)器端發(fā)送的應(yīng)答信息
DeleIndex:byte;//用戶要?jiǎng)h的郵件序號(hào)
ListIndex:byte;//list方法 的參數(shù):
用戶要列出的序號(hào)為listindex的郵件信息
RetrIndex:byte;//retr方法的參數(shù):
用戶要取序號(hào)為retrindex的郵件
TopIndex:byte; //top方法的參數(shù)
QuitFlag:boolean;//用戶如果通過(guò)quit命斷連則此變量為true;
反之(此時(shí)要把f_dele都置回0)
OldMsgCount:integer;//舊郵件數(shù):Last 命令返回
//郵件頭的各個(gè)域
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服務(wù)器必須支持的命令
procedure user;
function pass:boolean;
procedure stat;
procedure dele;
procedure list;
procedure retr;
procedure noop;
procedure rset;
procedure aquit;
procedure tquit;
//擴(kuò)展的可選擇實(shí)現(xiàn)的POP3 命令
procedure top;
procedure last;
procedure apop;
procedure uidl;
end;
1. 建立連接
我們可以看到利用了Tclientsocket后客戶端請(qǐng)求建立連接只需下面的代碼。
with ClientSocket do
begin
Host := Server;
Active := True;
end;
服務(wù)器端利用TserverSocket,一直在偵聽110端口,若客戶端有連接請(qǐng)求,則ServerSocketAccept事件會(huì)被激活,建立起連接。

procedure TMyForm.ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
begin
Statusbar1.Panels[0].Text :=
'連接到 ' + Socket.RemoteAddress;
//pop對(duì)象初始化
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. 通信
服務(wù)器端收到客戶端發(fā)來(lái)的信息,則會(huì)激活ServerSocketClientRead事件,通過(guò)ServerSocket的Socket.ReceiveText可以得到信息的內(nèi)容。

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. 關(guān)閉連接
procedure TMyForm.ServerSocket
ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ServerSocket.Active := False;
//如果client端沒(méi)有通過(guò)quit 命令斷連,
則在斷連時(shí)要把那些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;
三. 結(jié)語(yǔ)

  由于Email系統(tǒng)與數(shù)據(jù)庫(kù)表結(jié)構(gòu)的緊密聯(lián)系,筆者沒(méi)有寫出各POP3命令的具體實(shí)現(xiàn)。相信讀者在認(rèn)真閱讀了RFC1939之后不難寫出實(shí)現(xiàn)函數(shù)。現(xiàn)在就動(dòng)手為你的公司寫一個(gè)自己的Email服務(wù)器吧! 

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        久久99热国产| 亚洲永久精品国产| 日韩一区在线免费观看| 国产一区二区三区视频在线播放| 欧美老女人第四色| 美女视频黄 久久| 图片区小说区区亚洲影院| 91精彩视频在线| 亚洲第一精品在线| 欧美一区二区视频观看视频| 美女尤物国产一区| 国产欧美日韩久久| 91女人视频在线观看| 美女视频网站久久| 欧美一区二区大片| 首页国产丝袜综合| 欧美α欧美αv大片| 美腿丝袜亚洲色图| 2021国产精品久久精品| av不卡免费电影| 天堂资源在线中文精品| 欧美精品一区二区蜜臀亚洲| 丰满少妇久久久久久久| 亚洲图片自拍偷拍| 久久久久久免费毛片精品| 91美女在线观看| 欧美男同性恋视频网站| 亚洲福利视频一区二区| 在线观看网站黄不卡| 亚洲综合一二三区| 91麻豆精品国产91久久久使用方法| 蜜臀91精品一区二区三区| 国产午夜精品一区二区| 色天天综合色天天久久| 蜜臀av性久久久久蜜臀av麻豆| 国产精品卡一卡二卡三| 在线播放欧美女士性生活| 成人午夜精品在线| 美腿丝袜亚洲综合| 亚洲一区二区三区四区在线免费观看 | 欧美一级在线视频| 久久99热国产| 亚洲精品乱码久久久久| 日韩视频免费观看高清在线视频| 97久久超碰精品国产| 精品写真视频在线观看| 亚洲一区二区三区四区不卡| 日本一区二区不卡视频| 精品电影一区二区| 91精品国产综合久久精品app| 99国产精品久久久久| 高清不卡在线观看av| 久久99精品久久久| 日韩电影一二三区| 日韩黄色免费网站| 污片在线观看一区二区| 性欧美大战久久久久久久久| 亚洲精品视频免费看| 最近日韩中文字幕| 国产精品麻豆久久久| 日本一区二区三级电影在线观看| 精品嫩草影院久久| 日韩黄色小视频| 日韩欧美国产三级| 7777精品伊人久久久大香线蕉| 国产精品一区二区免费不卡 | 美洲天堂一区二卡三卡四卡视频| 亚洲午夜免费福利视频| 亚洲精品免费播放| 一区二区在线看| 一区二区三区日韩欧美| 亚洲欧美欧美一区二区三区| 亚洲欧洲综合另类| 国产乱对白刺激视频不卡| 丁香婷婷综合网| 久久99久久99精品免视看婷婷| 蜜臀国产一区二区三区在线播放| 日本免费在线视频不卡一不卡二| 秋霞av亚洲一区二区三| 欧美96一区二区免费视频| 免费观看久久久4p| 国产成人欧美日韩在线电影| 成人午夜精品在线| 一本到一区二区三区| 欧美喷潮久久久xxxxx| 欧美一区二区三区公司| 久久奇米777| 亚洲欧美一区二区三区孕妇| 亚洲一级电影视频| 精品在线视频一区| gogo大胆日本视频一区| 欧美日产在线观看| 国产欧美日韩中文久久| 一区二区三区在线视频免费| 蜜臀av国产精品久久久久| 国产精品乡下勾搭老头1| 91在线无精精品入口| 56国语精品自产拍在线观看| 国产网站一区二区三区| 亚洲国产人成综合网站| 国产一区二区不卡| 欧美日韩国产电影| 国产精品看片你懂得| 久久国产夜色精品鲁鲁99| 97久久精品人人做人人爽| 精品第一国产综合精品aⅴ| 一区二区三区日韩欧美| 国产精一品亚洲二区在线视频| 色婷婷综合久色| www日韩大片| 天天色天天操综合| 色婷婷久久一区二区三区麻豆| 久久天堂av综合合色蜜桃网| 亚洲国产一区二区视频| 懂色中文一区二区在线播放| 91精品国产综合久久小美女| 亚洲男人的天堂在线aⅴ视频| 国产做a爰片久久毛片| 欧美二区乱c少妇| 亚洲一区二区三区爽爽爽爽爽| 国产一区二区不卡在线| 91精品国产色综合久久不卡蜜臀| 亚洲欧美欧美一区二区三区| 成人性生交大合| 国产日产欧美精品一区二区三区| 麻豆91在线观看| 日韩一区二区高清| 亚洲国产一二三| 欧美性xxxxxxxx| 亚洲猫色日本管| 色综合久久久久综合99| 国产精品传媒入口麻豆| 亚洲综合在线观看视频| 亚洲已满18点击进入久久| 丁香一区二区三区| 久久精品免费在线观看| 极品少妇xxxx精品少妇| 91精品国产色综合久久ai换脸| 亚洲国产va精品久久久不卡综合 | 亚洲欧美中日韩| 国产suv精品一区二区三区| 久久伊人蜜桃av一区二区| 精品一区二区在线播放| 欧美成人高清电影在线| 国产主播一区二区三区| 国产亚洲综合在线| 成人高清伦理免费影院在线观看| 久久久精品影视| 成人午夜精品在线| 国产99一区视频免费 | 中文字幕高清一区| 91精品免费在线观看| 99精品视频一区二区三区| 欧美日韩一级片网站| 日韩一级免费一区| 亚洲欧美一区二区三区孕妇| 老司机精品视频一区二区三区| 不卡一区中文字幕| 中文字幕第一区| 国产精品一区二区在线播放| 欧美精品 国产精品| 亚洲欧美日韩一区二区三区在线观看| 精品亚洲免费视频| 久久久久久久久久久久电影| 日韩精品成人一区二区三区| 日本久久电影网| 日本成人在线不卡视频| 欧美中文字幕一二三区视频| 亚洲国产欧美日韩另类综合| 欧美日韩国产综合视频在线观看| 一区二区三区成人| 欧美一级日韩免费不卡| 久久99国产乱子伦精品免费| 国产欧美一区二区精品仙草咪| 97se亚洲国产综合在线| 亚洲一级在线观看| 精品国产一区二区三区不卡| 国产69精品久久777的优势| 亚洲制服丝袜一区| 欧美福利电影网| 精品在线一区二区| 亚洲美女视频在线观看| 日韩精品专区在线| 97精品久久久久中文字幕| 美脚の诱脚舐め脚责91| 亚洲欧洲日韩综合一区二区| 欧美一区二区三区四区在线观看| 国产 欧美在线| 日韩av电影天堂| 久久久蜜臀国产一区二区| 国产欧美日韩卡一| 91论坛在线播放| 麻豆精品在线播放| 一区二区三区小说| 国产精品久久久久天堂| 久久夜色精品国产噜噜av| 2022国产精品视频| 日本一区二区视频在线观看| 久久久亚洲精品一区二区三区| 日韩亚洲欧美成人一区|