网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi开发Email服务器的简单实现
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式
ket

一直在侦听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服务器吧!

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号