一个检查邮件的例程

ZDNet软件频道 时间:2000-05-29 作者:ZDNet China |  我要评论(19)
本文关键词:Mail RFC1939 RFC822 VB Visual Basic
用VB从底层开始编制一个处理电子邮件的软件

Download Mail Checker Sample Application (Mailcheck.zip, 7Kb)

我们假设你已经对POP3协议有所了解,而如果你了解RFC1939这个文件的内容就更好不过。RFC1939是官方发布的最后一个正式的文档以解释POP3协议的目的,命令和服务器的响应等等。幸运的是该文档并不十分的庞杂,不至于令你花费很长的阅读它。不过你不必花费大量的时间勾画其原理,在这里我们将向你解释这些。

启动Visual Basic建立一个标准EXE项目。添加MS Winsock控件,名字为Windows Common Controls-1。最后我们还要使用到ListView控件。同时我们还会用到一些其它的标准控件,如图所示:

如果你决定复制我们提供的代码并直接的使用这些,确定你放置的控件名字和相关属性与下面列表所述一致。

控件类型

名字

说明

Textbox

txtHost

表明邮件服务器的名字

Textbox

txtUserName

用户名的输入 (邮箱的鉴别名)

Textbox

txtPassword

密码输入

Textbox

txtBody

显示邮件信息

Listview

lvMessages

显示邮件列表

Command Button

cmdCheckMail

该按钮用于激活接受邮件的相关进程。

Command Button

cmdExit

退出程序

将txtBody的属性设置为Multiline=True 和 Scrollbars= 3-Both。

ListView控件设置为4列,标题(Header)为:"From", "Subject", "Date", "Size",View属性设置为3-lvwReport。

程序简洁的界面可以令人很容易的使用,首先要输入邮件服务器的名字,用户名和密码,点击“Check e-Mail”按钮后,等待邮件显示在ListView控件的行中。当选择了列表中的邮件时,邮件的信息将会显示在txtBody控件中。

考虑到我们现有的情形,以及VB事件驱动的特性,可以推断我们只有两个事件需要处理:cmdCheckMail_Click 和 lvMessages_ItemClick.细心的读者会发现我们没有考虑退出程序的进程,也就是mbExit的按钮的进程,主要是该进程实在是偏离本篇文章的主题,所以不在此考虑。让我们将注意力集中在我们应该注意的地方,当用户点击”Check e-Mail”按钮的时候,会调用cmdCheckMail_Click进程。该进程要做两件事情,首先检查文本域的内容,并调用Wisock控件的Connect方法建立和邮件服务器的连接。

Private Sub cmdCheckMail_Click()

'Check the emptiness of all the text fields except for the txtBody
For Each c In Controls
    If TypeOf c Is TextBox And c.Name <> "txtBody" Then
        If Len(c.Text) = 0 Then
            MsgBox c.Name & " can't be empty", VBCritical
            Exit Sub
        End If
    End If
Next

'Change the value of current session state
m_State = POP3_Connect
'Close the socket in case it was opened while another session
Winsock1.Close
'reset the value of the local port in order to let to the
'Windows Sockets select the new one itself
'It's necessary in order to prevent the "Address in use" error,
'which can appear if the Winsock Control has already used while the 
'previous session
Winsock1.LocalPort = 0
'POP3 server waits for the connection request at the port 110.
'According with that we want the Winsock Control to be connected to
'the port number 110 of the server we have supplied in txtHost field
Winsock1.Connect txtHost, 110

End Sub

It seems everything is clear besides this string:

除了以下这句,其他的看起来都很清楚。

m_State = POP3_Connect

以下是解释。cmdCheckMail_Click 进程仅仅建立和邮件服务器的连接。所有下一步的工作都会由Winsock控件的DataArrival进行控制。

该事件在Winsock控件接收到服务器的数据时被激发,并且依照接收到数据作下一步的动作,也就意味着应用程序要理解接收到的代码的各部分。

为了让程序更灵活,应该记住最后一次发送的命令,另一个意思就是当前的会话的状态。m_State参数就是用来完成这件工作的,它用来接收特定数据类型POP3States预定义的值。

Private Enum POP3States
    POP3_Connect
    POP3_USER
    POP3_PASS
    POP3_STAT
    POP3_RETR
    POP3_DELE
    POP3_QUIT
End Enum

Private m_State As POP3States



  下一页
  第二页

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134