SMTP

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
DRU
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 16.11.2008 (Вс) 23:26
Откуда: Беларусь, Гомель

SMTP

Сообщение DRU » 13.01.2009 (Вт) 20:26

Доброго времени суток!
Нашел пример отправки писем через SMTP протокол на этом сайте, как оказалось, он не авторизируется на сервере что делает отправку писем в наше время невозможной. Так вот, как авторизироваться на smtp сервере или возможно существуют другие пути обхода авторизации? Жду ответа, зарание спасибо! :roll:
Вот исходник:
Код: Выделить всё
Const SMTP = 25
Dim HOST As String

Dim SMTP_STATE As Byte

Private Sub Command1_Click()
Call SaveAppSetting
Dim I As Byte

Dim Temp As Byte 'для мелочей

Winsock.Close ' на всякий случай вдруг кто-то  несколько раз пошлёт

For I = 1 To Len(RCPT.Text)
If Mid(RCPT.Text, I, 1) = "@" Then Temp = 1
Next I

If Not Temp = 1 Then
MsgBox "Введённый E-Mail Адрес получателя не верный.", vbCritical + vbApplicationModal + vbOKOnly, "Внимание!"
Exit Sub
End If

'определяем хост получателя, чтоб сообщение не ходило по куче серверов
RCPT = Trim$(RCPT)
FROM = Trim$(FROM)
SMTP_HOST = Trim$(SMTP_HOST)

For I = 1 To Len(RCPT)
If Mid(RCPT, I, 1) = "@" Then HOST = Right(RCPT, Len(RCPT) - I)

Next I

Winsock.RemotePort = SMTP
Winsock.RemoteHost = SMTP_HOST
Winsock.Connect

Text1 = ""
Text1 = "Connecting..."
State = MAIL_CONNECT
End Sub

Private Sub Form_Load()
Dim t As String
t = GetSetting("E-Mail", "Settings", "SMTP")
If Not t = "" Then SMTP_HOST.Text = t Else SMTP_HOST.Text = "smtp.mail.ru"
t = ""
t = GetSetting("E-Mail", "Settings", "User_Adress")

If t <> "" Then
    FROM.Text = t
Else
    FROM.Text = ""
End If

End Sub

Sub SaveAppSetting()
SaveSetting "E-Mail", "Settings", "SMTP", SMTP_HOST.Text
SaveSetting "E-Mail", "Settings", "User_Adress", FROM.Text
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call SaveAppSetting
End Sub

Private Sub Winsock_Connect()
Text1 = Text1 & "OK" & vbCrLf
End Sub

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Winsock.GetData Data, vbString
Text1 = Text1 & Data & vbCrLf
Text1.SelStart = Len(Text1.Text) - 1
If Left(Data, 3) = "220" Or Left(Data, 3) = "250" Or Left(Data, 3) = "354" Then
 
  Select Case SMTP_STATE
    Case 0
      SMTP_STATE = 1
      Data = "RSET" & vbCrLf
      Winsock.SendData Data
      Text1 = Text1 & Data
    Case 1
      SMTP_STATE = 2
      Data = "HELO " & HOST & vbCrLf
      Text1 = Text1 & Data
      Winsock.SendData Data
    Case 2
      SMTP_STATE = 3
      Data = "MAIL FROM: " & FROM & vbCrLf
      Text1 = Text1 & Data
      Winsock.SendData Data
    Case 3
      SMTP_STATE = 4
      Data = "RCPT TO: " & RCPT & vbCrLf
      Text1 = Text1 & Data
      Winsock.SendData Data
    Case 4
      SMTP_STATE = 5
      Data = "DATA" & vbCrLf
      Text1 = Text1 & Data
      Winsock.SendData Data
    Case 5
      SMTP_STATE = 6
     
      Data = "Subject: " & Subject & vbCrLf & _
             "From: " & FROM & vbCrLf & _
             "To: " & RCPT & vbCrLf & _
             "MIME-Version: 1.0" & vbCrLf & _
             "Content-Type: text/plain; charset=" & Chr(34) & "windows-1251" & Chr(34) & vbCrLf

      Text1 = Text1 & Data
      Winsock.SendData Data
      Data = MESSAGE & vbCrLf & "." & vbCrLf
      Text1 = Text1 & Data
      Winsock.SendData Data
    Case 6
      SMTP_STATE = 7
      Data = "QUIT" & vbCrLf
      Winsock.SendData Data
      Winsock.Close
      SMTP_STATE = 0
      MsgBox "Сообщение было отправленно!", vbInformation + vbOKOnly, "E-Mail"
    Case Else
      Winsock.Close
      SMTP_STATE = 0
      MsgBox "Сообщение НЕ было отправленно!", vbCritical + vbOKOnly, "ERROR - E-Mail"
End Select
      Text1.SelStart = Len(Text1) - 1
Else
  Dim MSG
 
Select Case Left(Data, 3)
  Case "421"
    MSG = SMTP_HOST & " служба недоступна, соединение закрывается"
  Case "450"
    MSG = "Запрошенная команда почтовой транзакции не выполнена, так как почтовый ящик недоступен"
  Case "451"
    MSG = "Запрошенная команда не выполнена; произошла локальная ошибка при обработке сообщения"
  Case "452"
    MSG = "Запрошенная команда не выполнена; системе не хватило ресурсов"
  Case "500"
    MSG = "Синтаксическая ошибка в тексте команды; команда не опознана"
  Case "501"
    MSG = "Синтаксическая ошибка в аргументах или параметрах команды"
  Case "502"
    MSG = "Данная команда не реализована"
  Case "503"
    MSG = "Неверная последовательность команд"
  Case "504"
    MSG = "У данной команды не может быть аргументов"
  Case "550"
    MSG = "Запрошенная команда не выполнена, так как почтовый ящик недоступен"
  Case "551"
    MSG = "Данный адресат не является местным; попробуйте передать сообщение по маршруту <forward-path>"
  Case "552"
    MSG = "Запрошенная команда почтовой транзакции прервана; дисковое пространство, доступное системе, переполнилось"
  Case "553"
    MSG = "Запрошенная команда не выполнена; указано недопустимое имя почтового ящика"
  Case "554"
    MSG = "Сообщение не было отправленно"
  End Select
  If Not MSG = "" Then MsgBox MSG, vbCritical + vbOKOnly, "Ошибка!!!"
End If

End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: SMTP

Сообщение Хакер » 13.01.2009 (Вт) 20:38

Путей обойти авторизацию нет, иначе сложно представить себе смысл авторизации.

http://tools.ietf.org/html/rfc2554

Кроме того, у нас есть правильный кирпич для подобных нужд.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 76

    TopList