www.pudn.com > VBkongjian.rar > frmSendMail.frm


VERSION 5.00 
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX" 
Begin VB.Form frmSendMail  
   BorderStyle     =   1  'Fixed Single 
   Caption         =   "Simple Mail Sender" 
   ClientHeight    =   4095 
   ClientLeft      =   45 
   ClientTop       =   330 
   ClientWidth     =   8415 
   LinkTopic       =   "Form1" 
   MaxButton       =   0   'False 
   MinButton       =   0   'False 
   ScaleHeight     =   4095 
   ScaleWidth      =   8415 
   StartUpPosition =   3  '´°¿Úȱʡ 
   Begin MSWinsockLib.Winsock Winsock1  
      Left            =   2400 
      Top             =   2520 
      _ExtentX        =   741 
      _ExtentY        =   741 
      _Version        =   393216 
   End 
   Begin VB.CommandButton cmdClose  
      Caption         =   "&Close" 
      Height          =   375 
      Left            =   6840 
      TabIndex        =   11 
      Top             =   1080 
      Width           =   1455 
   End 
   Begin VB.CommandButton cmdSend  
      Caption         =   "&Send message" 
      Height          =   375 
      Left            =   6840 
      TabIndex        =   10 
      Top             =   600 
      Width           =   1455 
   End 
   Begin VB.CommandButton cmdNew  
      Caption         =   "&New Message" 
      Height          =   375 
      Left            =   6840 
      TabIndex        =   9 
      Top             =   120 
      Width           =   1455 
   End 
   Begin VB.TextBox txtMessage  
      Height          =   2415 
      Left            =   120 
      MultiLine       =   -1  'True 
      ScrollBars      =   3  'Both 
      TabIndex        =   8 
      Top             =   1560 
      Width           =   8175 
   End 
   Begin VB.TextBox txtSubject  
      Height          =   285 
      Left            =   1080 
      TabIndex        =   7 
      Text            =   "NiceFormÓû§" 
      Top             =   1200 
      Width           =   5655 
   End 
   Begin VB.TextBox txtRecipient  
      Height          =   285 
      Left            =   2160 
      TabIndex        =   6 
      Text            =   "huacn131@163.com" 
      Top             =   840 
      Width           =   4575 
   End 
   Begin VB.TextBox txtSender  
      Height          =   285 
      Left            =   2040 
      TabIndex        =   5 
      Text            =   "huacn131@163.com" 
      Top             =   480 
      Width           =   4695 
   End 
   Begin VB.TextBox txtHost  
      Height          =   285 
      Left            =   2040 
      TabIndex        =   4 
      Text            =   "Smtp.163.com" 
      Top             =   120 
      Width           =   4695 
   End 
   Begin VB.Label Label4  
      AutoSize        =   -1  'True 
      Caption         =   "Subject:" 
      Height          =   195 
      Left            =   120 
      TabIndex        =   3 
      Top             =   1200 
      Width           =   585 
   End 
   Begin VB.Label Label3  
      AutoSize        =   -1  'True 
      BackStyle       =   0  'Transparent 
      Caption         =   "Recipient e-mail address:" 
      Height          =   195 
      Left            =   120 
      TabIndex        =   2 
      Top             =   840 
      Width           =   1770 
   End 
   Begin VB.Label Label2  
      AutoSize        =   -1  'True 
      BackStyle       =   0  'Transparent 
      Caption         =   "Your e-mail address:" 
      Height          =   195 
      Left            =   120 
      TabIndex        =   1 
      Top             =   480 
      Width           =   1425 
   End 
   Begin VB.Label Label1  
      AutoSize        =   -1  'True 
      Caption         =   "SMTP Host:" 
      Height          =   195 
      Left            =   120 
      TabIndex        =   0 
      Top             =   120 
      Width           =   870 
   End 
End 
Attribute VB_Name = "frmSendMail" 
Attribute VB_GlobalNameSpace = False 
Attribute VB_Creatable = False 
Attribute VB_PredeclaredId = True 
Attribute VB_Exposed = False 
Private Enum SMTP_State 
    MAIL_CONNECT 
    MAIL_HELO 
    MAIL_FROM 
    MAIL_RCPTTO 
    MAIL_DATA 
    MAIL_DOT 
    MAIL_QUIT 
End Enum 
 
Private m_State As SMTP_State 
' 
 
Private Sub cmdClose_Click() 
 
    Unload Me 
     
End Sub 
 
Private Sub cmdNew_Click() 
 
    txtRecipient = "" 
    txtSubject = "" 
    txtMessage = "" 
     
End Sub 
 
Private Sub cmdSend_Click() 
 
    Winsock1.Connect Trim$(txtHost), 25 
    m_State = MAIL_CONNECT 
     
End Sub 
 
Private Sub Form_Load() 
    ' 
    'clear all textboxes 
    ' 
    For Each ctl In Me.Controls 
        If TypeOf ctl Is TextBox Then 
            ctl.Text = "" 
        End If 
    Next 
    ' 
End Sub 
 
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
 
    Dim strServerResponse   As String 
    Dim strResponseCode     As String 
    Dim strDataToSend       As String 
    ' 
    'Retrive data from winsock buffer 
    ' 
    Winsock1.GetData strServerResponse 
    ' 
    Debug.Print strServerResponse 
    ' 
    'Get server response code (first three symbols) 
    ' 
    strResponseCode = left(strServerResponse, 3) 
    ' 
    'Only these three codes tell us that previous 
    'command accepted successfully and we can go on 
    ' 
    If strResponseCode = "250" Or _ 
       strResponseCode = "220" Or _ 
       strResponseCode = "354" Then 
        
        Select Case m_State 
            Case MAIL_CONNECT 
                'Change current state of the session 
                m_State = MAIL_HELO 
                ' 
                'Remove blank spaces 
                strDataToSend = Trim$(txtSender) 
                ' 
                'Retrieve mailbox name from e-mail address 
                strDataToSend = left$(strDataToSend, _ 
                                InStr(1, strDataToSend, "@") - 1) 
                'Send HELO command to the server 
                Winsock1.SendData "HELO " & strDataToSend & vbCrLf 
                ' 
                Debug.Print "HELO " & strDataToSend 
                ' 
            Case MAIL_HELO 
                ' 
                'Change current state of the session 
                m_State = MAIL_FROM 
                ' 
                'Send MAIL FROM command to the server 
                Winsock1.SendData "MAIL FROM:" & Trim$(txtSender) & vbCrLf 
                ' 
                Debug.Print "MAIL FROM:" & Trim$(txtSender) 
                ' 
            Case MAIL_FROM 
                ' 
                'Change current state of the session 
                m_State = MAIL_RCPTTO 
                ' 
                'Send RCPT TO command to the server 
                Winsock1.SendData "RCPT TO:" & Trim$(txtRecipient) & vbCrLf 
                ' 
                Debug.Print "RCPT TO:" & Trim$(txtRecipient) 
                ' 
            Case MAIL_RCPTTO 
                ' 
                'Change current state of the session 
                m_State = MAIL_DATA 
                ' 
                'Send DATA command to the server 
                Winsock1.SendData "DATA" & vbCrLf 
                ' 
                Debug.Print "DATA" 
                ' 
            Case MAIL_DATA 
                ' 
                'Change current state of the session 
                m_State = MAIL_DOT 
                ' 
                'So now we are sending a message body 
                'Each line of text must be completed with 
                'linefeed symbol (Chr$(10) or vbLf) not with vbCrLf 
                ' 
                'Send Subject line 
                Winsock1.SendData "Subject:" & txtSubject & vbLf 
                ' 
                Debug.Print "Subject:" & txtSubject 
                ' 
                Dim varLines    As Variant 
                Dim varLine     As Variant 
                ' 
                'Parse message to get lines (for VB6 only) 
                varLines = Split(txtMessage, vbCrLf) 
                ' 
                'Send each line of the message 
                For Each varLine In varLines 
                    Winsock1.SendData CStr(varLine) & vbLf 
                    ' 
                    Debug.Print CStr(varLine) 
                Next 
                ' 
                'Send a dot symbol to inform server 
                'that sending of message comleted 
                Winsock1.SendData "." & vbCrLf 
                ' 
                Debug.Print "." 
                ' 
            Case MAIL_DOT 
                'Change current state of the session 
                m_State = MAIL_QUIT 
                ' 
                'Send QUIT command to the server 
                Winsock1.SendData "QUIT" & vbCrLf 
                ' 
                Debug.Print "QUIT" 
            Case MAIL_QUIT 
                ' 
                'Close connection 
                Winsock1.Close 
                ' 
        End Select 
        
    Else 
        ' 
        'If we are here server replied with 
        'unacceptable respose code therefore we need 
        'close connection and inform user about problem 
        ' 
        Winsock1.Close 
        ' 
        If Not m_State = MAIL_QUIT Then 
            MsgBox "SMTP Error: " & strServerResponse, _ 
                    vbInformation, "SMTP Error" 
        Else 
            MsgBox "Message sent successfuly.", vbInformation 
        End If 
        ' 
    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 " & Number & vbCrLf & _ 
            Description, vbExclamation, "Winsock Error" 
 
End Sub