frmSendMail.frm
上传用户:schhyycc
上传日期:2022-08-11
资源大小:7k
文件大小:9k
源码类别:

Email客户端

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "Mswinsck.ocx"
  3. Begin VB.Form frmSendMail 
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Simple Mail Sender"
  6.    ClientHeight    =   4095
  7.    ClientLeft      =   45
  8.    ClientTop       =   330
  9.    ClientWidth     =   6630
  10.    Icon            =   "frmSendMail.frx":0000
  11.    LinkTopic       =   "Form1"
  12.    MaxButton       =   0   'False
  13.    MinButton       =   0   'False
  14.    ScaleHeight     =   4095
  15.    ScaleWidth      =   6630
  16.    StartUpPosition =   3  'Windows Default
  17.    Begin MSWinsockLib.Winsock Winsock1 
  18.       Left            =   2400
  19.       Top             =   2520
  20.       _ExtentX        =   741
  21.       _ExtentY        =   741
  22.       _Version        =   393216
  23.    End
  24.    Begin VB.CommandButton cmdClose 
  25.       Caption         =   "&Close"
  26.       Height          =   375
  27.       Left            =   5040
  28.       TabIndex        =   11
  29.       Top             =   1080
  30.       Width           =   1455
  31.    End
  32.    Begin VB.CommandButton cmdSend 
  33.       Caption         =   "&Send message"
  34.       Height          =   375
  35.       Left            =   5040
  36.       TabIndex        =   10
  37.       Top             =   600
  38.       Width           =   1455
  39.    End
  40.    Begin VB.CommandButton cmdNew 
  41.       Caption         =   "&New Message"
  42.       Height          =   375
  43.       Left            =   5040
  44.       TabIndex        =   9
  45.       Top             =   120
  46.       Width           =   1455
  47.    End
  48.    Begin VB.TextBox txtMessage 
  49.       Height          =   2415
  50.       Left            =   120
  51.       MultiLine       =   -1  'True
  52.       ScrollBars      =   3  'Both
  53.       TabIndex        =   8
  54.       Text            =   "frmSendMail.frx":030A
  55.       Top             =   1560
  56.       Width           =   6375
  57.    End
  58.    Begin VB.TextBox txtSubject 
  59.       Height          =   285
  60.       Left            =   1920
  61.       TabIndex        =   7
  62.       Text            =   "txtSubject"
  63.       Top             =   1200
  64.       Width           =   3015
  65.    End
  66.    Begin VB.TextBox txtRecipient 
  67.       Height          =   285
  68.       Left            =   1920
  69.       TabIndex        =   6
  70.       Text            =   "txtRecipient"
  71.       Top             =   840
  72.       Width           =   3015
  73.    End
  74.    Begin VB.TextBox txtSender 
  75.       Height          =   285
  76.       Left            =   1920
  77.       TabIndex        =   5
  78.       Text            =   "txtSender"
  79.       Top             =   480
  80.       Width           =   3015
  81.    End
  82.    Begin VB.TextBox txtHost 
  83.       Height          =   285
  84.       Left            =   1920
  85.       TabIndex        =   4
  86.       Text            =   "txtHost"
  87.       Top             =   120
  88.       Width           =   3015
  89.    End
  90.    Begin VB.Label Label4 
  91.       AutoSize        =   -1  'True
  92.       Caption         =   "Subject:"
  93.       Height          =   195
  94.       Left            =   1245
  95.       TabIndex        =   3
  96.       Top             =   1200
  97.       Width           =   585
  98.    End
  99.    Begin VB.Label Label3 
  100.       AutoSize        =   -1  'True
  101.       Caption         =   "Recipient e-mail address:"
  102.       Height          =   195
  103.       Left            =   60
  104.       TabIndex        =   2
  105.       Top             =   840
  106.       Width           =   1770
  107.    End
  108.    Begin VB.Label Label2 
  109.       AutoSize        =   -1  'True
  110.       Caption         =   "Your e-mail address:"
  111.       Height          =   195
  112.       Left            =   405
  113.       TabIndex        =   1
  114.       Top             =   480
  115.       Width           =   1425
  116.    End
  117.    Begin VB.Label Label1 
  118.       AutoSize        =   -1  'True
  119.       Caption         =   "SMTP Host:"
  120.       Height          =   195
  121.       Left            =   960
  122.       TabIndex        =   0
  123.       Top             =   120
  124.       Width           =   870
  125.    End
  126. End
  127. Attribute VB_Name = "frmSendMail"
  128. Attribute VB_GlobalNameSpace = False
  129. Attribute VB_Creatable = False
  130. Attribute VB_PredeclaredId = True
  131. Attribute VB_Exposed = False
  132. Private Enum SMTP_State
  133.     MAIL_CONNECT
  134.     MAIL_HELO
  135.     MAIL_FROM
  136.     MAIL_RCPTTO
  137.     MAIL_DATA
  138.     MAIL_DOT
  139.     MAIL_QUIT
  140. End Enum
  141. Private m_State As SMTP_State
  142. '
  143. Private Sub cmdClose_Click()
  144.     Unload Me
  145.     
  146. End Sub
  147. Private Sub cmdNew_Click()
  148.     txtRecipient = ""
  149.     txtSubject = ""
  150.     txtMessage = ""
  151.     
  152. End Sub
  153. Private Sub cmdSend_Click()
  154.     Winsock1.Connect Trim$(txtHost), 25
  155.     m_State = MAIL_CONNECT
  156.     
  157. End Sub
  158. Private Sub Form_Load()
  159.     '
  160.     'clear all textboxes
  161.     '
  162.     For Each ctl In Me.Controls
  163.         If TypeOf ctl Is TextBox Then
  164.             ctl.Text = ""
  165.         End If
  166.     Next
  167.     '
  168. End Sub
  169. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  170.     Dim strServerResponse   As String
  171.     Dim strResponseCode     As String
  172.     Dim strDataToSend       As String
  173.     '
  174.     'Retrive data from winsock buffer
  175.     '
  176.     Winsock1.GetData strServerResponse
  177.     '
  178.     Debug.Print strServerResponse
  179.     '
  180.     'Get server response code (first three symbols)
  181.     '
  182.     strResponseCode = Left(strServerResponse, 3)
  183.     '
  184.     'Only these three codes tell us that previous
  185.     'command accepted successfully and we can go on
  186.     '
  187.     If strResponseCode = "250" Or _
  188.        strResponseCode = "220" Or _
  189.        strResponseCode = "354" Then
  190.        
  191.         Select Case m_State
  192.             Case MAIL_CONNECT
  193.                 'Change current state of the session
  194.                 m_State = MAIL_HELO
  195.                 '
  196.                 'Remove blank spaces
  197.                 strDataToSend = Trim$(txtSender)
  198.                 '
  199.                 'Retrieve mailbox name from e-mail address
  200.                 strDataToSend = Left$(strDataToSend, _
  201.                                 InStr(1, strDataToSend, "@") - 1)
  202.                 'Send HELO command to the server
  203.                 Winsock1.SendData "HELO " & strDataToSend & vbCrLf
  204.                 '
  205.                 Debug.Print "HELO " & strDataToSend
  206.                 '
  207.             Case MAIL_HELO
  208.                 '
  209.                 'Change current state of the session
  210.                 m_State = MAIL_FROM
  211.                 '
  212.                 'Send MAIL FROM command to the server
  213.                 Winsock1.SendData "MAIL FROM:" & Trim$(txtSender) & vbCrLf
  214.                 '
  215.                 Debug.Print "MAIL FROM:" & Trim$(txtSender)
  216.                 '
  217.             Case MAIL_FROM
  218.                 '
  219.                 'Change current state of the session
  220.                 m_State = MAIL_RCPTTO
  221.                 '
  222.                 'Send RCPT TO command to the server
  223.                 Winsock1.SendData "RCPT TO:" & Trim$(txtRecipient) & vbCrLf
  224.                 '
  225.                 Debug.Print "RCPT TO:" & Trim$(txtRecipient)
  226.                 '
  227.             Case MAIL_RCPTTO
  228.                 '
  229.                 'Change current state of the session
  230.                 m_State = MAIL_DATA
  231.                 '
  232.                 'Send DATA command to the server
  233.                 Winsock1.SendData "DATA" & vbCrLf
  234.                 '
  235.                 Debug.Print "DATA"
  236.                 '
  237.             Case MAIL_DATA
  238.                 '
  239.                 'Change current state of the session
  240.                 m_State = MAIL_DOT
  241.                 '
  242.                 'So now we are sending a message body
  243.                 'Each line of text must be completed with
  244.                 'linefeed symbol (Chr$(10) or vbLf) not with vbCrLf
  245.                 '
  246.                 'Send Subject line
  247.                 Winsock1.SendData "Subject:" & txtSubject & vbLf
  248.                 '
  249.                 Debug.Print "Subject:" & txtSubject
  250.                 '
  251.                 Dim varLines    As Variant
  252.                 Dim varLine     As Variant
  253.                 '
  254.                 'Parse message to get lines (for VB6 only)
  255.                 varLines = Split(txtMessage, vbCrLf)
  256.                 '
  257.                 'Send each line of the message
  258.                 For Each varLine In varLines
  259.                     Winsock1.SendData CStr(varLine) & vbLf
  260.                     '
  261.                     Debug.Print CStr(varLine)
  262.                 Next
  263.                 '
  264.                 'Send a dot symbol to inform server
  265.                 'that sending of message comleted
  266.                 Winsock1.SendData "." & vbCrLf
  267.                 '
  268.                 Debug.Print "."
  269.                 '
  270.             Case MAIL_DOT
  271.                 'Change current state of the session
  272.                 m_State = MAIL_QUIT
  273.                 '
  274.                 'Send QUIT command to the server
  275.                 Winsock1.SendData "QUIT" & vbCrLf
  276.                 '
  277.                 Debug.Print "QUIT"
  278.             Case MAIL_QUIT
  279.                 '
  280.                 'Close connection
  281.                 Winsock1.Close
  282.                 '
  283.         End Select
  284.        
  285.     Else
  286.         '
  287.         'If we are here server replied with
  288.         'unacceptable respose code therefore we need
  289.         'close connection and inform user about problem
  290.         '
  291.         Winsock1.Close
  292.         '
  293.         If Not m_State = MAIL_QUIT Then
  294.             MsgBox "SMTP Error: " & strServerResponse, _
  295.                     vbInformation, "SMTP Error"
  296.         Else
  297.             MsgBox "Message sent successfuly.", vbInformation
  298.         End If
  299.         '
  300.     End If
  301.     
  302. End Sub
  303. 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)
  304.     MsgBox "Winsock Error number " & Number & vbCrLf & _
  305.             Description, vbExclamation, "Winsock Error"
  306. End Sub