E-mail

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

E-mail

Сообщение xsting » 03.05.2004 (Пн) 20:01

Как отправить определённый файл на мыло?????
P.S. Нужно что-бы и подключение к инету проверялось.....
"Мы верим - этот мир реален"
(Нави)

CyberYen
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 10.03.2004 (Ср) 18:14

Сообщение CyberYen » 04.05.2004 (Вт) 12:29

1. Общие принципы работы почтового сервера.
2. Возможности Visual Basic для работы с почтой.


1. Сервер для работы с любой почтовой программой использует порт №110. После того как клиент подключается к серверу по TCP протоколу, сервер начинает процесс авторизации, т. е. запрашивает имя пользователя и пароль. Если запрошенная информация верна, сервер и клиент начинают передачу, в ходе которой сервер и клиент обмениваются командами. Под командой подразумевается определённое ключевое слово из английских символов. Все команды определены соглашениями SMTP и POP3.
После получения и отправки всех сообщений сервер переходит в режим обновления (Update по-английски) и закрывает текущий сеанс связи.
Теперь я для ясности приведу список всех наиболее важных POP3 команд:

"USER " & UserName отправляется непосредственно после ответа установки соединения с сервером.

"PASS " & Password отправляется после положительного ответа сервера на имя пользователя. Сервер должен ответить что-то вроде «+OK password required for user”

!NB: Все ответы сервера можно условно для ясности разделить на «положительные» и «отрицательные»: +OK и –ERR. После этого идентификатора следует сам ответ сервера.

"STAT" запрос на получение сообщений. Сервер выдаёт положительный ответ "+OK", за которым следует количество сообщений в почтовом ящике и их общий размер (в символах.)

“DELE” & Number сервер пометит сообщение с указанным номером как удалённое, и при переходе в режим обновления уничтожит его.

!“RSET” если сообщение было помечено для удаления, то с него будет снята эта пометка.


“TOP” & Number & n сервер передаёт заголовки и n количество строк из тела указанного сообщения.

“NOOP“ Сервер возвращает положительный ответ
и не производит никакой операции.

„LAST“ сервер возвращает наибольший номер сообщения
из тех, к которым в этом сеансе уже обращались.

“QUIT” и так всё понятно. Сервер на этом этапе удалит все сообщения, помеченные командой “DELE”

!NB Все команды сервера и клиента обязательно заканчиваются переходом на новую строку, т. е. vbNewLine или vbClrf в VisualBasic.

2. А теперь я опишу общий принцип, как же в Visual Basic можно послать почтовое сообщение.
Для этого потребуется элемент Winsock. Можно, конечно, сделать это и с помощью «голого» API, но это уже вызовет множество затруднений да и статья растянется до пределов маленькой книжки.
Отправка сообщения идёт следующим образом:
Через 25 порт программа подключается к серверу(без всякого пароля, если на этом сервере уже есть ваша учётная запись), и посылает следующие данные:
Адрес отправителя
Адрес получателя
Дата
Имя отправителя
Имя получателя
Тема сообщения
Тело сообщения
Тип почтового клиента
Особая комбинация (нас она сейчас не интересует)
Мы будем действовать по следующей схеме: будем отправлять данные по порядку и ожидать ответа сервера. Для этого нам понадобиться следующая функция:


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

С её помощью мы сможем получить у сервера положительный или отрицательный ответ.
Далее сама функция отправки(Winsock должен быть уже на форме):


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-MailerMyMail v1.0" + vbCrLf ‘придумайте что-нибудь своё
Eighth = Fourth + Third + Ninth + Fifth + Sixth
Winsock1.Protocol = sckTCPProtocol
Winsock1.RemoteHost = MailServerName
Winsock1.RemotePort = 25
Winsock1.Connect
WaitFor ("220")
Winsock1.SendData ("HELO " + vbCrLf)
WaitFor ("250")
Winsock1.SendData (first)
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)
WaitFor ("221")
Winsock1.Close
Else
MsgBox (Str(Winsock1.State))
End If
End Sub

И в событие Winsock1_DataArrival вставьте
Winsock1.GetData Response
Всё. Нужно только запустить функцию SendEmail, и программа начнёт работать.
________________
Не помню, где нашел эту статейку, но вроде все работает.

xsting
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 24.03.2004 (Ср) 16:42
Откуда: Украина, Крым

Сообщение xsting » 04.05.2004 (Вт) 19:37

Ну спасибо
"Мы верим - этот мир реален"
(Нави)


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList