- Код: Выделить всё
Option Explicit
Dim Response As String, Reply As Integer, DateNow As String
Dim first As String, Second As String, Third As String
Dim Fourth As String, Fifth As String, Sixth As String
Dim Seventh As String, Eighth As String, Ninth As String
Dim Start As Single, Tmr As Single
Sub SendEmail(MailServerName As String, FromName As String, _
FromEmailAddress As String, ToName As String, _
ToEmailAddress As String, EmailSubject As String, _
EmailBodyOfMessage As String)
Winsock1.LocalPort = 0 'Присваиваем нулю, чтобы можно было послать более одного письма
If Winsock1.State = sckClosed Then ' Проверяем закрыт ли сокет
DateNow = Format(Date, "Ddd") & ", " & Format(Date, "dd Mmm YYYY") _
& " " & Format(Time, "hh:mm:ss") & "" & " -0600"
'Адрес отправителя
first = "mail from:" + Chr(32) + FromEmailAddress + vbCrLf
'Адрес получателя
Second = "rcpt to:" + Chr(32) + ToEmailAddress + vbCrLf
'Дата отправления
Third = "Date:" + Chr(32) + DateNow + vbCrLf
'Имя отправителя
Fourth = "From:" + Chr(32) + FromName + vbCrLf
'Имя получателя
Fifth = "To:" + Chr(32) + ToNametxt + vbCrLf
'Тема письма
Sixth = "Subject:" + Chr(32) + EmailSubject + vbCrLf
'Текст письма
Seventh = EmailBodyOfMessage + vbCrLf
'Название программы
Ninth = "X-Mailer: EBT Reporter v 2.x" + vbCrLf
'Объединяем сформированные значения переменных в одну главную переменную
Eighth = Fourth + Third + Ninth + Fifth + Sixth
'Установка протокола
Winsock1.Protocol = sckTCPProtocol
'Установка SMTP сервера
Winsock1.RemoteHost = MailServerName
'Установка адреса сервера
Winsock1.RemotePort = 25
'Установление связи
Winsock1.Connect
WaitFor ("220")
StatusTxt.Caption = "Соединяемся...."
StatusTxt.Refresh
Winsock1.SendData ("HELO yourdomain.com" + vbCrLf)
WaitFor ("250")
StatusTxt.Caption = "Соединение установлено"
StatusTxt.Refresh
Winsock1.SendData (first)
StatusTxt.Caption = "Отправляем сообщение"
StatusTxt.Refresh
WaitFor ("250")
Winsock1.SendData (Second)
WaitFor ("250")
Winsock1.SendData ("data" + vbCrLf)
WaitFor ("354")
Winsock1.SendData (Eighth + vbCrLf)
Winsock1.SendData (Seventh + vbCrLf)
Winsock1.SendData ("." + vbCrLf)
WaitFor ("250")
Winsock1.SendData ("quit" + vbCrLf)
StatusTxt.Caption = "Отключение"
StatusTxt.Refresh
WaitFor ("221")
Winsock1.Close
Else
MsgBox (Str(Winsock1.State))
End If
End Sub
Sub WaitFor(ResponseCode As String)
Start = Timer ' Необходимо чтобы не зациклиться
While Len(Response) = 0
Tmr = Start - Timer
DoEvents 'Чтобы программа могла реагировать на другие события во время выполнения цикла
If Tmr > 50 Then ' Время в секундах для ожидания
MsgBox "Ошибка SMTP сервера", 64, "Ошибка"
Exit Sub
End If
Wend
While Left(Response, 3) <> ResponseCode
DoEvents 'Чтобы программа могла реагировать на другие события во время выполнения цикла
If Tmr > 50 Then
MsgBox "Ошибка SMTP сервера: " + ResponseCode + " отклик " + Response, 64, "Ошибка"
Exit Sub
End If
Wend
Response = "" 'отсылаем пустой отклик
End Sub
Private Sub Command1_Click()
SendEmail EmailServer.Text, FromName.Text, _
FromEmailAddress.Text, ToEmailAddress.Text, _
ToEmailAddress.Text, EmailSubject.Text, _
EmailBodyOfMessage.Text
'MsgBox ("Письмо отослано")
StatusTxt.Caption = "Письмо отослано"
StatusTxt.Refresh
Beep
Close
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData Response
End Sub