分享
 
 
 

Winsock POP3教程(二)

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

获取邮件

LIST命令和RETR命令

LIST命令和RETR命令只能在“处理”状态下执行,就是说只有在用户登录以后才可以执行这两个命令。

LIST命令获得邮件服务器中的邮件列表。该命令的格式如下:

LIST [msg]

其中参数msg是可选的参数,该参数指定要列举的邮件的编号,该参数不能指定为一个已经标记为删除的邮件的编号。

如果没有指定参数而且命令调用成功,邮件服务器首先会返回服务器中的所有邮件列表,这个列表以一个+OK开头的字符串作为起始。对于

邮件服务器中的每一个邮件,邮件服务器都会返回一行字符串,为了便于分析,这行字符串应该由邮件编号 + 一个空格 + 邮件的尺寸 组成。

在邮件列表的结尾,邮件服务器会返回一个vbCRLF + "." + vbCRLF的字符串作为列表的结尾。例如在教程一中点击“邮件列表”按钮在文本框

中输出的字符串所示。

注意:不同的邮件服务器返回的内容可能有所不同,有些邮件服务器返回的信息会更多一些(例如在+OK后面返回总邮件数和邮件总尺寸等)。

但是标准的POP3协议所描述的返回内容只有上面这些,所以在开发过程中需要注意,不要把一些邮件服务器所返回的附加内容作为标准在你的

代码里面实现,这样的话可能在其他邮件服务器上面就通不过。

RETR命令获得邮件服务器中的邮件内容,该命令的格式如下:

RETR msg

其中参数msg是必选的参数,该参数指定要获得的邮件的编号,该参数不能指定为一个已经标记为删除的邮件的编号。

如果命令调用成功,邮件服务器会返回指定的邮件的内容,返回的内容头一行是+OK,然后是邮件内容,最后是一个vbCRLF + "." +

vbCRLF的字符的串作为结尾。

在Winsock编程中,对于LIST命令和RETR命令,服务器返回的内容是分多次返回的,所以会多次触发DataArrival事件,所以需要在程序中

设置命令状态,在发出LIST或者RETR命令后将程序的状态置于LIST或者RETR状态下,在这个状态下所有收到的内容都是服务器返回的响应的组

成部分,直到收到结束字符串vbCRLF + "." + vbCRLF。

下面是如何通过Winsock发送LIST命令和RETR命令获得邮件列表以及获取邮件内容,在教程一的窗体中再增加一个CommandButton按钮,

Name属性为:cmdRETR。

Enum enumPOPCommand

popUSER = 1

popPASS = 2

popQUIT = 3

popLIST = 4

popDELETE = 5

popRETR = 6

popNONE = 999

End Enum

Private m_Command As enumPOPCommand

Private m_MailLists As New Collection

Private m_Messages As String

Private m_MailMessage As String

Private m_MessageCout As Integer

Sub strListsToCollection(strLists As String, coll As Collection)

Dim s() As String

Dim i As Integer

Dim count As Integer

s = Split(strLists, vbCrLf)

'获得邮件列表和邮件数

For i = LBound(s) To UBound(s)

If (Trim(s(i)) <> "") And (Trim(s(i)) <> ".") Then

coll.Add Trim(s(i))

count = count + 1

End If

Next i

MsgBox "共" & count & "个邮件!"

End Sub

Private Sub cmdConnect_Click()

'连接到邮件服务器

Winsock1.Connect

End Sub

Private Sub cmdList_Click()

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

Winsock1.SendData "LIST" & vbCrLf

'切换当前状态

m_Command = popLIST

End Sub

Private Sub cmdLoggin_Click()

'登录到邮件服务器

Winsock1.SendData "USER chenrui@applevb.com" & vbCrLf

Winsock1.SendData "PASS eddi1" & vbCrLf

End Sub

Private Sub cmdQuit_Click()

'发送退出消息

m_Command = popQUIT

Winsock1.SendData "QUIT" & vbCrLf

End Sub

Private Sub cmdRETR_Click()

Dim i

'获得服务器上面的第二封邮件

m_Command = popRETR

m_MailMessage = ""

Winsock1.SendData "RETR 2" & vbCrLf

End Sub

Private Sub Winsock1_Close()

'关闭与服务器的连接

Winsock1.Close

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim s As String

Dim i As Integer

'获取服务器的响应信息

s = Space(bytesTotal)

Winsock1.GetData s

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

Select Case m_Command

'邮件列表LIST状态

Case enumPOPCommand.popLIST

If Left$(s, 4) = "+OK " Then

m_Messages = ""

ElseIf Left$(s, 4) = "+ERR" Then

m_Command = popNONE

Else

m_Messages = m_Messages + s

If InStr(1, s, vbCrLf & "." & vbCrLf) > 0 Then

strListsToCollection m_Messages, m_MailLists

m_Command = popNONE

End If

End If

'获取邮件RETR状态

Case enumPOPCommand.popRETR

If Left$(s, 4) = "+OK " Then

m_MailMessage = ""

ElseIf Left$(s, 4) = "+ERR" Then

m_Command = popNONE

Else

m_MailMessage = m_MailMessage + s

If InStr(1, s, vbCrLf & "." & vbCrLf) > 0 Then

m_Command = popNONE

txtMSG = m_MailMessage

End If

End If

End Select

End Sub

在下面的教程中,将介绍如何实现其它的协议。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有