⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain.frm

📁 < VB高级网络编程技术>>随书源代码第2章,里面有很多有用的例程,希望对大家的开发工作有帮助!
💻 FRM
字号:
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.3#0"; "COMCTL32.OCX"
Begin VB.Form frmMain 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "RFC822邮件"
   ClientHeight    =   6000
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   7335
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   6000
   ScaleWidth      =   7335
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton cmdDel 
      Caption         =   "退出"
      BeginProperty Font 
         Name            =   "幼圆"
         Size            =   9.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   5880
      TabIndex        =   10
      Top             =   5520
      Width           =   1335
   End
   Begin VB.CommandButton cmdCheckMail 
      Caption         =   "收信"
      BeginProperty Font 
         Name            =   "幼圆"
         Size            =   9.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   4440
      TabIndex        =   9
      Top             =   5520
      Width           =   1335
   End
   Begin MSWinsockLib.Winsock Winsock1 
      Left            =   3480
      Top             =   2760
      _ExtentX        =   741
      _ExtentY        =   741
      _Version        =   393216
   End
   Begin VB.TextBox txtBody 
      BeginProperty Font 
         Name            =   "幼圆"
         Size            =   9.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   2655
      Left            =   180
      MultiLine       =   -1  'True
      ScrollBars      =   3  'Both
      TabIndex        =   7
      Text            =   "frmMain.frx":0000
      Top             =   2760
      Width           =   7035
   End
   Begin VB.Frame Frame4 
      Caption         =   "信件"
      BeginProperty Font 
         Name            =   "幼圆"
         Size            =   9.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   1815
      Left            =   120
      TabIndex        =   6
      Top             =   840
      Width           =   7095
      Begin ComctlLib.ListView lvMessages 
         Height          =   1455
         Left            =   60
         TabIndex        =   8
         Top             =   240
         Width           =   6975
         _ExtentX        =   12303
         _ExtentY        =   2566
         View            =   3
         LabelWrap       =   -1  'True
         HideSelection   =   -1  'True
         _Version        =   327682
         ForeColor       =   -2147483640
         BackColor       =   -2147483643
         BorderStyle     =   1
         Appearance      =   1
         NumItems        =   4
         BeginProperty ColumnHeader(1) {0713E8C7-850A-101B-AFC0-4210102A8DA7} 
            Key             =   ""
            Object.Tag             =   ""
            Text            =   "From"
            Object.Width           =   2540
         EndProperty
         BeginProperty ColumnHeader(2) {0713E8C7-850A-101B-AFC0-4210102A8DA7} 
            SubItemIndex    =   1
            Key             =   ""
            Object.Tag             =   ""
            Text            =   "Subject"
            Object.Width           =   2540
         EndProperty
         BeginProperty ColumnHeader(3) {0713E8C7-850A-101B-AFC0-4210102A8DA7} 
            SubItemIndex    =   2
            Key             =   ""
            Object.Tag             =   ""
            Text            =   "Date"
            Object.Width           =   2540
         EndProperty
         BeginProperty ColumnHeader(4) {0713E8C7-850A-101B-AFC0-4210102A8DA7} 
            SubItemIndex    =   3
            Key             =   ""
            Object.Tag             =   ""
            Text            =   "Size"
            Object.Width           =   2540
         EndProperty
      End
   End
   Begin VB.Frame Frame3 
      Caption         =   "密码"
      BeginProperty Font 
         Name            =   "幼圆"
         Size            =   9.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   4920
      TabIndex        =   4
      Top             =   120
      Width           =   2295
      Begin VB.TextBox txtPassword 
         Height          =   285
         IMEMode         =   3  'DISABLE
         Left            =   120
         PasswordChar    =   "*"
         TabIndex        =   5
         Text            =   "1"
         Top             =   240
         Width           =   2055
      End
   End
   Begin VB.Frame Frame2 
      Caption         =   "信箱用户名"
      BeginProperty Font 
         Name            =   "幼圆"
         Size            =   9.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   2520
      TabIndex        =   2
      Top             =   120
      Width           =   2295
      Begin VB.TextBox txtUserName 
         Height          =   285
         Left            =   120
         TabIndex        =   3
         Text            =   "zj"
         Top             =   240
         Width           =   2055
      End
   End
   Begin VB.Frame Frame1 
      Caption         =   "POP3服务器"
      BeginProperty Font 
         Name            =   "幼圆"
         Size            =   9.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   120
      TabIndex        =   0
      Top             =   120
      Width           =   2295
      Begin VB.TextBox txtHost 
         Height          =   285
         Left            =   120
         TabIndex        =   1
         Text            =   "10.11.111.119"
         Top             =   240
         Width           =   2055
      End
   End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'定义POP3会话状态的枚举类型
Private Enum POP3States
    POP3_Connect
    POP3_USER
    POP3_PASS
    POP3_STAT
    POP3_RETR
    POP3_DELE
    POP3_QUIT
End Enum

'表示当前POP3会话的枚举变量
Private m_State         As POP3States

Private m_oMessage      As CMessage
Private m_colMessages   As New CMessages
'

Private Sub cmdCheckMail_Click()

'检查除了txtBody之外的TextBox是否为空
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
'
'改变表示当前状态的变量
m_State = POP3_Connect

'在打开一个新的会话之前先关闭Winsock
Winsock1.Close

'指定服务器地址和端口并连接服务器
Winsock1.RemotePort = 110
Winsock1.RemoteHost = txtHost.Text
Winsock1.Connect
End Sub

Private Sub cmdDel_Click()
Unload Me
End Sub

Private Sub lvMessages_ItemClick(ByVal Item As ComctlLib.ListItem)

    txtBody = m_colMessages(Item.Key).MessageBody
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

Static intMessages          As Integer '记录信箱的信件数
Static intCurrentMessage    As Integer '当前下载的信件
Static strBuffer            As String  '接收消息的字符串变量
'
'从winsock接收缓冲区中读取数据
Winsock1.GetData strData
Debug.Print strData

If Left$(strData, 1) = "+" Or m_State = POP3_RETR Then
'如果接收字符串的第一个字符为“+”表示服务器接收了来自客户端的请求命令
'If the first character of the server's response is "+" then
'如果接到的第一个字符为“-”,则表示服务器认为来自客户端的请求是错误的。
'如果会话状态正处于接收邮件,则不需要判断第一个字符。
    Select Case m_State
        Case POP3_Connect
            '
            '将消息(信件)记数设置为0 Reset the number of messages
            intMessages = 0
            '
            '改变当前会话状态为发送用户名 Change current state of session
            m_State = POP3_USER
            '
            '发送USER及其参数
            Winsock1.SendData "USER " & txtUserName & vbCrLf
            Debug.Print "USER " & txtUserName
        Case POP3_USER
            '
            '如果能够执行到这一步,表示发送给服务器的用户名已经通过服务器的验证
            '改变当前会话状态为发送密码阶段
            m_State = POP3_PASS
            '发送密码
            Winsock1.SendData "PASS " & txtPassword & vbCrLf
            Debug.Print "PASS " & txtPassword
        Case POP3_PASS
            '
            ' Change the state of the session
            '如果能够执行到这一步,表示发送给服务器的密码已经通过服务器的验证
            '改变当前会话状态为取得邮箱信息阶段
            m_State = POP3_STAT
            '
            '发送STAT命令,要求服务器返回邮箱信息
            Winsock1.SendData "STAT" & vbCrLf
            Debug.Print "STAT"
        Case POP3_STAT
            '
            '从接收的从服务器返回的邮箱状态字符串中获得邮件数量
            intMessages = CInt(Mid$(strData, 5, _
                          InStr(5, strData, " ") - 5))
            If intMessages > 0 Then
                '如果邮件的数量>0,设置当前会话状态为取回信件阶段
                m_State = POP3_RETR
                '设置变量表明当前取回的是哪个信件
                intCurrentMessage = intCurrentMessage + 1
                '
                '发送RETR及参数取回第一封邮件
                Winsock1.SendData "RETR 1" & vbCrLf
                Debug.Print "RETR 1"
            Else
                '如果是处于其它状态,设置当前状态为退出会话阶段
                m_State = POP3_QUIT
                '发送QUIT命令退出会话过程
                Winsock1.SendData "QUIT" & vbCrLf
                Debug.Print "QUIT"
                MsgBox "You have not mail.", vbInformation
            End If
        Case POP3_RETR
            '如果执行到这个阶段,说明邮箱中存在至少一封以上的信件
            '循环执行该过程取得信件的内容
            strBuffer = strBuffer & strData
            '
            If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
                '如果接收到的信件内容的字符串中存在vbLf & "." & vbCrLf表示
                '使用RETR返回的信件数据已经完毕
                '
                '从服务器接收到信件的数据中将响应行去掉
                strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
                '
                '从信件的数据中去掉最后的vbLf & "." & vbCrLf
                strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
                '
                '创建CMessage分析取得的信件数据
                Set m_oMessage = New CMessage
                m_oMessage.CreateFromText strBuffer
                '将分析结果加入到m_colMessages对象的集合中
                m_colMessages.Add m_oMessage, m_oMessage.MessageID
                Set m_oMessage = Nothing
                '
                '清除接收信件数据的字符串
                strBuffer = ""
                '判断是否已经取完信件
                If intCurrentMessage = intMessages Then
                    m_State = POP3_QUIT
                    '退出POP3会话
                    Winsock1.SendData "QUIT" & vbCrLf
                    Debug.Print "QUIT"
                Else
                    intCurrentMessage = intCurrentMessage + 1
                    m_State = POP3_RETR
                    '发送RETR命令取回下一封信
                    Winsock1.SendData "RETR " & _
                    CStr(intCurrentMessage) & vbCrLf
                    Debug.Print "RETR " & intCurrentMessage
                End If
            End If
        Case POP3_QUIT
            '关闭Winsock连接
            Winsock1.Close
            '调用该函数将信件内容加入到ListView中
            Call ListMessages
    End Select
Else

    '出错关闭Winsock连接并提示
    Winsock1.Close
    MsgBox "POP3 Error: " & strData, _
    vbExclamation, "POP3 Error"
End If
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)

MsgBox "Winsock Error: #" & Number & vbCrLf & _
        Description
            
End Sub

Private Sub ListMessages()
'将信件的主题,发送日期,大小加入到ListView中
Dim oMes As CMessage
Dim lvItem As ListItem

For Each oMes In m_colMessages
    Set lvItem = lvMessages.ListItems.Add
    lvItem.Key = oMes.MessageID
    lvItem.Text = oMes.From
    lvItem.SubItems(1) = oMes.Subject
    lvItem.SubItems(2) = oMes.SendDate
    lvItem.SubItems(3) = oMes.Size
Next
    
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -