分享
 
 
 

winsock POP3教程(一)

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

了解POP3

POP3简介

POP3是Post Office Protocol - Version 3的简称,这个协议是目前绝大多数电子邮件程序使用的收邮件程序,通过该协议,电子邮件客户端程序可以登录到电子邮件服务器上接受电子邮件。POP3协议是一种脱机模型的协议,当客户端查询并下载电子邮件后,客户端就与服务器端断开连接,用户在客户端可以随意的删除、修改邮件的内容。

POP3的通信方式

初始时,邮件服务器通过侦听TCP端口110开始POP3服务。当客户程序需要使用服务时,它将与邮件服务器建立TCP连接。当连接建立后,客户端就可以与服务器端进行通信,POP3的客户端与服务器端的通信采用ASCII形式的命令行方式来实现,客户端向用户发送一个POP3命令(POP3命令是大小写不敏感的),POP3命令由一个命令和一些参数组成。所有命令以一个CRLF对结束。命令和参数由可打印的ASCII字符组成,它们之间由空格间隔。命令一般是三到四个字母,每个参数却可达40个字符长。邮件服务器端接收响应,也会向客户端发送一个ASCII格式的响应消息。

POP3响应由一个状态码和一个可能跟有附加信息的命令组成。所有响应也是由CRLF对结束。现在有两种状态码,"确定" ("+OK")和"失败" ("-ERR")(服务器返回的"+OK"或者"-ERR"必须是大写的)。

邮件服务器返回的相应可以是单行的或者多行的文本,对于多行文本,没一行都是以一个回车换行(CRLF)符作为结尾,如果返回的响应中包含了符号"CRLF.CRLF"(其中"."的ASCII码为46),那么说明服务器返回的响应已经结束。

在生命周期中,POP3会话有几个不同的状态。一旦TCP连接被打开,而且邮件服务器发送了确认信息,此过程就进入了“认证”(AUTHORIZATION)状态。在此状态中,客户必须向邮件服务器确认自己是其客户。一旦认证成功,邮件服务器就获取与客户邮件相关的资源,此时这一过程进入了“处理”(TRANSACTION)状态。在此状态中,客户提出服务请求,当客户发出QUIT命令时,此过程进入了“更新”(UPDATE)状态。在此状态中,邮件服务器释放在"操作"状态中取得的资源,并发送消息,终止连接。

作为一个脱机模型的协议,邮件服务器必须有一个自动断开连接的计时器,这个计时器最少不能少于10分钟。超过这个时限后,邮件服务器不会进入“更新”状态而是直接断开TCP连接,同时不会对服务器上的消息做修改,也不会向客户端发送任何响应消息。

POP3得简单范例

下面通过一个简单的范例来演示如何使用Winsock控件通过POP3协议来实现登录到邮件服务器然后退出。

创建一个新工程,在其中添加一个TextBox,将它的Name设置为txtMSG,将MultiLine属性设置为True,将这个文本框的尺寸摄制的尽可能大。然后添加四个CommandButton控件,将他们的Name分别设置为cmdConnect、cmdLoggin、cmdList、cmdQuit,它们的作用分别是连接、登录、邮件列表和退出邮件服务器。然后添加一个Winsock控件,将Protocol属性设置为0 - sckTCPProtocol,将RemoteHost属性设置位POP3服务器的地址,例如POP.163.com,将RemotePort设置为服务器的POP3服务端口,一般是110,将LocalPort设置为一个未使用的端口,例如410。

然后实现的代码如下:

Private Sub cmdConnect_Click()

'连接到邮件服务器

Winsock1.Connect

End Sub

Private Sub cmdList_Click()

'列出邮件服务器上的邮件

Winsock1.SendData "LIST" & vbCrLf

End Sub

Private Sub cmdLoggin_Click()

'登录到邮件服务器

Winsock1.SendData "USER xxxxx" & vbCrLf

Winsock1.SendData "PASS aaaaa" & vbCrLf

End Sub

Private Sub cmdQuit_Click()

'发送退出消息

Winsock1.SendData "QUIT" & vbCrLf

End Sub

Private Sub Winsock1_Close()

'关闭与服务器的连接

Winsock1.Close

End Sub

Private Sub Winsock1_Connect()

Debug.Print "connection "

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim s As String

'获取服务器的响应信息

s = Space(bytesTotal)

Winsock1.GetData s

txtMSG.Text = txtMSG.Text & "message: " & s

End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal

HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

'输出错误信息

Debug.Print Description

Debug.Print Number

End Sub

要运行上面的代码,需要将上面的代码的:

Winsock1.SendData "USER xxxxx" & vbCrLf

Winsock1.SendData "PASS aaaaa" & vbCrLf

中的xxxxx设置为登录POP3服务器的用户名,将aaaaa设置为登录POP3服务器的密码。

运行程序,点击cmdConnect连接到POP3服务器,点击cmdLoggin登录到邮件服务器,点击cmdList将服务器上面的邮件列出来,点击cmdQuit退出登录。如果POP3地址设置正确,用户名和密码正确,在txtMSG中应该列出如下的内容:

现在再看看上面的代码,在上面的代码中,点击cmdLoggin登录到邮件服务器,登录成功后邮件服务器会返回类似:+OK POP3 Welcome to quarkmail server version 1.2.1 这样的响应。这时的状态是“认证”状态,在这个状态下,客户端需要发送登录命令登录到邮件服务器,这里我们发送的是“USER”和“PASS”命令登录,登录成功后邮件服务器会返回 +OK 的成功响应,否则会返回 -ERR 的错误消息。

登录成功后,这时的状态是“处理”状态,这时就可以通过发送例如“LIST”等命令来对邮件服务器上的邮件进行处理。

在处理完邮件后,单击cmdQuit发送“QUIT”命令退出登录,在退出成功后,状态变为“更新”状态,同时邮件服务器会断开TCP连接,客户端得Winsock会接收到关闭连接的消息,所以需要在Winsock的Close事件中关闭客户端得TCP连接。

在POP3协议中,对于客户端发送的命令,无论是有效的还是无效的命令,邮件服务器都必须对其作出响应,在我们的程序中,我们只需要在Winsock的DataArrival事件中获得服务器的响应消息并且根据POP3协议的规定对消息进行处理就可以了解邮件服务器在跟我们“说什么”。至于发送到邮件服务器的命令的详细解释以及邮件服务器响应的消息的含义,教程将在以后逐步的向大家介绍。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有