Непонятки c WinSock

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Monstric
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 07.02.2006 (Вт) 16:04

Непонятки c WinSock

Сообщение Monstric » 08.02.2006 (Ср) 10:05

Пытаюсь сделать отправку почты по SMTP , но приходят ответы от сервака в непонятном виде. НАпример спосле
WinSock1.Connect ответ "?‰Я идиот! Убейте меня, кто-нибудь!???.......?‰??" , где ... - это вопросики
ПОсле ПОсылку HELO ответ "?‰??"
НУ и всё в таком ключе!
ОС WinXP SP2 Proff RUS
VB6

Када соединяюсь телнетом то ответ от сервака нормальный
220 ..... ESMTP Server (Microsoft Exchange Internet Mail S
ervice 5.5.2653.13) ready , где ... -название сервера
Семь бед - один RESET!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.02.2006 (Ср) 10:11

Как соединяешься? Код выложи.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.02.2006 (Ср) 10:16

И как принимаешь ответы сервера.
Скорее всего из-за юникода проблемы.
Lasciate ogni speranza, voi ch'entrate.

Monstric
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 07.02.2006 (Вт) 16:04

Сообщение Monstric » 08.02.2006 (Ср) 10:23

Sub SendEmail(MailServerName As String, FromName As String, FromEmailAddress As String, ToName As String, ToEmailAddress As String, EmailSubject As String, EmailBodyOfMessage As String)
Dim First As String
Dim Second As String
Dim Third As String
Dim Fourth As String
Dim Sixth As String
Dim Seventh As String
Dim Ninht As String
Dim Eghth As String

Form1.Winsock1.LocalPort = 0
Form1.Winsock1.Close
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-MailerMyMail v1.0" + vbCrLf 'придумайте что-нибудь своё
Eighth = Fourth + Third + Ninth + Fifth + Sixth
Form1.Winsock1.Protocol = 0
Form1.Winsock1.RemoteHost = MailServerName
Form1.Winsock1.RemotePort = 25
Form1.Winsock1.Connect
WaitFor ("220")
Form1.Winsock1.SendData ("HELO" & vbCrLf)
WaitFor ("250")
Form1.Winsock1.SendData (First)
WaitFor ("250")
Form1.Winsock1.SendData (Second)
WaitFor ("250")
Form1.Winsock1.SendData ("data" + vbCrLf)
WaitFor ("354")
Form1.Winsock1.SendData (Eighth + vbCrLf)
Form1.Winsock1.SendData (Seventh + vbCrLf)
Form1.Winsock1.SendData ("." + vbCrLf)
WaitFor ("250")
Form1.Winsock1.SendData ("quit" + vbCrLf)
WaitFor ("221")
Form1.Winsock1.Close

End Sub
Sub WaitFor(ResponseCode As String)
Start = Timer ' Time event so won't get stuck in loop
While Len(Response) = 0
Tmr = Start - Timer
DoEvents ' Let System keep checking for incoming response **IMPORTANT**
If Tmr > 50 Then ' Время в секундах на ожидание
MsgBox "Превышение периода ожидания", vbCritical
Exit Sub
End If
Wend
While Left(Response, 3) <> ResponseCode
DoEvents
If Tmr > 50 Then
MsgBox "Неправильный код", vbCritical
Exit Sub
End If
Wend
Response = ""
End Sub

Так как времени на прогу мало, то пришлось взять с инета готовый пример!
Семь бед - один RESET!

Monstric
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 07.02.2006 (Вт) 16:04

Сообщение Monstric » 08.02.2006 (Ср) 10:24

Если что ногами не принайте! В программировании я не силён да и работы дофига, а автоматизировать некоторые процессы нужно!


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData Response
Debug.Print Response
End Sub
Семь бед - один RESET!

Monstric
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 07.02.2006 (Вт) 16:04

Сообщение Monstric » 08.02.2006 (Ср) 10:41

Всё, вопрос снят! РАзобрался вроде!
Семь бед - один RESET!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.02.2006 (Ср) 10:41

И что такое Response?
Весь код приведи.
Lasciate ogni speranza, voi ch'entrate.

Monstric
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 07.02.2006 (Вт) 16:04

Сообщение Monstric » 08.02.2006 (Ср) 13:31

alibek писал(а):И что такое Response?
Весь код приведи.

Response это перемнная куда ответ от сервера записывается!
Но проблема решена ужо!
Семь бед - один RESET!

Grey_Brother
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 09.02.2006 (Чт) 10:36
Откуда: Санкт-Петербург

Сообщение Grey_Brother » 09.02.2006 (Чт) 11:21

Ну и в чем баг был? из ByteArry в String плохо конвертил наверное?
С уважением, GB.

miwutka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 76
Зарегистрирован: 10.11.2005 (Чт) 16:34
Откуда: Moscow, Elektrostal

Сообщение miwutka » 21.04.2006 (Пт) 9:59

У меня mf же проблема, как ее победить?????

miwutka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 76
Зарегистрирован: 10.11.2005 (Чт) 16:34
Откуда: Moscow, Elektrostal

Сообщение miwutka » 21.04.2006 (Пт) 10:01

блин, уже разобрался.
если кому поможет: в Data_arrival объявляйте переменную (Response)
как string

Dim response as string
Winsock1.getData Response


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

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

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

    TopList  
cron