CSDN博客

img shanhe

利用POP3协议来管理自己的邮箱

发表于2004/6/24 9:57:00  3630人阅读

分类: VB

利用POP3协议来管理自己的邮箱

 

    电子邮件是每一个网民都应该拥有的证明网络身份的凭证,更重要的是保持网络联系的最重要的途径,每一个网民都应该妥善保管自己的电子邮箱。但是您知道电子邮件是怎样工作的吗?什么?不感兴趣?!——假设。。。您的电子邮箱被塞满了,您打算怎么办。。。?有兴趣了是不是。如果您知道了有一个叫做POP3的协议的话,您可以自己轻松管理自己的邮箱,不必看着满满的一箱垃圾发愁,也不必瞧着OutLook慢悠悠的“正在收取第185封信,共有308封”而心疼电话账单上的数字。


   言归正传,我们先了解一下电子邮件的原理。关于电子邮件有两个基本的协议必须了解:一个就是SMTP(SIMPLE MAIL TRANSFER PROTOCOL,简单邮件传输协议),它负责将您给朋友的电子信件经由互联网传送到朋友的邮箱,在此我们就不讨论了;另外一个协议就是POP3(Post Office Protocol version 3,邮局协议版本3),从字面上理解,我们可以看到该协议是为了帮助您取得存放在您的邮箱中的信件。通过这两个基本的电邮协议,我们就实现了这个电子邮件系统。当然,另外的一些协议也可以实现电子信件的交换,但是基本的协议就是这两个,任何一个电子邮件系统都必须实现它们才算完善。
POP3协议基本的内容是:
1。首先,客户(一般就是您所操纵的某一个类似OutLook的软件)通过网络与电子邮件服务器建立一个连接(行话叫套接字)。完成之后,双方就可以互相通话,“眉来眼去”。


2。客户发送自己的用户名,也就是您的自己的邮箱的@前面的名字了(有些系统要求完整的名字,您就需要连同@后面的域名一起带上。


3。客户等待服务器的应答,如果服务器检验,认为您给出的是它的一个合法用户,会给您一个“+OK”打头的答复。可以进行下一步。


4。客户发送该用户的密码。


5。通过后,服务器发送一个+OK”打头的答复。现在进入身份确认后的状态,可以发送一些命令给服务器了。一般支持的基本命令有:


STAT         请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数,没有参数需要带
UIDL [Msg#]  返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的,[Msg#]是该命令所带的参数,一般都是一串唯一的(类似36A5B1C608382)字符串。
LIST [Msg#]  返回邮件数量和每个邮件的大小,如果没有带参数,就是列出全部的邮件大小
RETR [Msg#]   返回由参数标识的邮件的全部文本,该命令让服务器送出您信箱中的某一个邮件全部文本。一般情况下,这些内容不是仅有有邮件客户软件给您阅读的内容,而是一个具有标准文法控制的文本串,需要专门的软件来解码后才看得到具体的内容。
DELE [Msg#]   服务器将由参数标识的邮件标记为删除,此时仅做一个删除标记,并非彻底删除该邮件。只有使用了Quit命令后才会真正删除邮件。所以,像OutLook类似的软件在收信断线后再收信会把上一次已经受到的信件又收一次。
RSET         服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP [Msg#]    服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP       服务器返回一个肯定的响应,一般是为了保持同服务器的连接,意义不大。


6。如果一切都搞定了(发出了该发出的命令),就可以使用Quit命令断开与服务器的连接,使用的命令是:Quit.接受到该命令后,服务器会断开套接字,然后删掉作了删除标记的邮件。
可以看到服务器一般只会发出两种状态:“+OK”和“+error”.如果在检验阶段发生错误就必须重新开始检验,而通过验证后发出错误的命令则可以重新发出。接受到 “+OK”后,说明刚才的命令得到正确的执行,可以进行到下一步或下一阶段。一般服务器会在+OK”和“+error”给出一段文本形式的当前状态说明,解释执行成功或不成功原因。


为了让大家充分理解这个原理,我编写一个VB小程序,接受大家输入的命令,显示服务器返回的应答,可以让大家充分感受自己同服务器对话的新鲜刺激。具体过程:
1。启动Vb,建立一个标准应用程序工程,加入Winsock控件。这个控件是我们操纵我们的计算机同邮件服务器进行“通话”的工具。

2。设置该控件的Protocol为:1(TCP协议),RemoteHost为:pop.163.net(这里我申请了一个163的用户来进行测试,“pop.163.net“是163邮局专门处理用户取信的POP3服务器,我申请的用户是:mytest2000,口令:test2000,大家可以使用此即进行测试,放心使用,我不介意的),RemotePort为:110(POP3协议的套接字使用端口110)。

3。添加三个Label控件,caption属性分别设为:“服务器响应内容”、“应答记载:”、“发送命令区”;添加三个textbox,清掉Text内容。其中Text1用来显示服务器给出的应答,Text2记载这个对话过程的双方的内容,Text3用来输出用户发给服务器的命令。添加两个命令按钮Command1和Command2,Caption分别为“启动”和“发送命令”。

4。编写事件响应代码,如下:
Private Sub Command1_Click()
Text1.Text = "Now conecting..." '显示当前状态,没有和服务器连接
If Winsock1.State = 7 Then '如果套接字连接,则关闭之
Winsock1.Close
End If
Winsock1.Connect '启动连接
Command1.Enabled = False '不可再一次连接
End Sub

Private Sub Command2_Click()
Winsock1.SendData Text3.Text '将输入的每一条命令发送给服务器后自动清除
Text3.Text = ""
End Sub

Private Sub Winsock1_Close()
Text1.Text = "Closed"
End Sub

Private Sub Winsock1_Connect()
Text1.Text = "connected"
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsock1.GetData str '接受数据,显示在Text1,加在Text2
Text1.Text = str
Text2.Text = Text2.Text + str
End Sub

Private Sub Command2_Click()
Winsock1.SendData Text3.Text '发送给出的命令
Text3.Text = ""
End Sub

这个小程序,可以让你亲自看到POP3的全过程,有了它,您也可以自己处理邮箱垃圾了。大家的测试过程可以是这样(所有引号不必输入,此处是为了表明是应当输入的内容部分,邮箱是一个真实的邮箱,大家可以随便测试):
1。点击Command1,等待Text1出现"connected"。
2。再Text3输入:“user mytest2000”,出现“+OK”信息后进入下一步。
3。输入“pass test2000”,等待出现“+OK”后表明身份确认通过。否则回到2,重新输入用户名。
4。此时,可以使用List、STAT、DELE、NOOP、UIDL、RSET、RETR、TOP等命令。此时服务器等候您的命令,管理您的邮箱。参考命令系列:
stat
list
list 1
retr 1
......

5。希望退出,输入“Quit”,退出对话。
附上我的测试程序的工作时快照图,可以看到我和pop.163.net的交流的内容^_^.

了解了以上的POP3过程后,我们可以设计自己的邮件处理程序:譬如当List一个邮件发现返回的数据超过一定的数量就可以认定为恶意炸弹,就可以自动发出DELE命令删除。加上这些逻辑自己就可以自动化管理自己的电子邮件了。当然,也可以利用协议本身的缺陷破译一般人的密码,但我不希望您这么做。如果您对于使用好POP3协议有什么更好的建议和意见,欢迎通过电子邮件与我联系(yangshanhe@121cn.com

杨山河

==

2000年写的

 

0 0

相关博文

我的热门文章

img
取 消
img