打印本文 打印本文 关闭窗口 关闭窗口
用VB实现一个简单的ESMTP客户端
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2063  更新时间:2009/4/23 18:59:49  文章录入:mintao  责任编辑:mintao

最近发现JMail居然没有for VB的例子,本来想用C#写一个的,可是家里的电脑只有一个VB,好的程序员是不能受制于开发工具的(虽然我并不是个程序员)。

花了一个晚上,面对着RFC0821和Ethereal的截包结果,功夫不负有心人,终于有一个简单的例子可以和大家共享了,希望大家讨论一下。(格式不怎么好,许多异常也没处理,另外VB的语法已经忘得差不多了,请大家谅解!)

项目包括两个文件

1 main.frm

VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   4725
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   5550
   LinkTopic       =   "Form1"
   ScaleHeight     =   4725
   ScaleWidth      =   5550
   StartUpPosition =   3  ''''Windows Default
   Begin MSWinsockLib.Winsock smtpClient
      Left            =   1680
      Top             =   120
      _ExtentX        =   741
      _ExtentY        =   741
      _Version        =   393216
      RemoteHost      =   "mail.domain.com"
      RemotePort      =   25
   End
   Begin VB.CommandButton Command2
      Caption         =   "Connect"
      Height          =   495
      Left            =   120
      TabIndex        =   3
      Top             =   120
      Width           =   1215
   End
   Begin VB.CommandButton Command1
      Caption         =   "Send"
      Height          =   375
      Left            =   4560
      TabIndex        =   2
      Top             =   4200
      Width           =   855
   End
   Begin VB.TextBox Text2
      Height          =   315
      Left            =   120
      TabIndex        =   1
      Top             =   4200
      Width           =   4215
   End
   Begin VB.TextBox Text1
      Height          =   3255
      Left            =   120
      MultiLine       =   -1  ''''True
      ScrollBars      =   2  ''''Vertical
      TabIndex        =   0
      Top             =   840
      Width           =   5295
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private state As Integer
Private FLAG_LINE_END As String
Private FLAG_MAIL_END As String

Private Sub Command1_Click()
    Text2.Text = base64encode(utf16to8(Text2.Text))
    ''''Text2.Text = base64decode(utf8to16(Text2.Text))
End Sub

Private Sub Command2_Click()
    state = 0
    smtpClient.Close
    smtpClient.Connect
End Sub

Private Sub Form_Load()
    mailcount = 2
    FLAG_LINE_END = Chr(13) + Chr(10)
    FLAG_MAIL_END = FLAG_LINE_END + "." + FLAG_LINE_END
End Sub

Private Sub Form_Terminate()
    smtpClient.Close
End Sub

Private Sub smtpClient_Close()
    ''''MsgBox "closed!"
    state = 0
End Sub

Private Sub smtpClient_DataArrival(ByVal bytesTotal As Long)
    Dim s As String
    smtpClient.GetData s
    Text1.Text = Text1.Text + s + FLAG_LINE_END
    Dim msgHead As String
    msgHead = Left(s, 3)
    Dim msgBody As String
    msgBody = Mid(s, 5)
   
    Dim msgType As Integer
    msgType = CInt(msgHead)
    Dim msgsend As String
   
    Select Case state
    Case 0  ''''start state
        Select Case msgType
        Case 220
            msgsend = "EHLO yourname" + FLAG_LINE_END
            smtpClient.SendData msgsend
            Text1.Text = Text1.Text + msgsend + FLAG_LINE_END
            state = 1
        Case 421    ''''Service not available
        End Select
    Case 1  ''''EHLO
        Select Case msgType
        Case 250
            msgsend = "AUTH LOGIN" + FLAG_LINE_END
            smtpClient.SendData msgsend
            Text1.Text = Text1.Text + msgsend + FLAG_LINE_END
            state = 2
        Case 500, 501, 504, 421 ''''error happened
        End Select
    Case 2  ''''AUTH LOGIN
        Select Case msgType
        Case 334
            If msgBody = "VXNlcm5hbWU6" + FLAG_LINE_END Then
                msgsend = base64encode(utf16to8("username")) + FLAG_LINE_END
                smtpClient.SendData msgsend
                Text1.Text = Text1.Text + msgsend + FLAG_LINE_END
            ElseIf msgBody = "UGFzc3dvcmQ6" + FLAG_LINE_END Then
                msgsend = base64encode(utf16to8("password")) + FLAG_LINE_END
                smtpClient.SendData msgsend
                Text1.Text = Text1.Text + msgsend + FLAG_LINE_END
            End If
        Case 235    ''''correct
            SetFrom "you@domain.com"
            state = 3
        Case 535    ''''incorrect
            Quit
    &nb

[1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口