СообЧа > База Знаний > Программирование > Visual Basic

Вопрос

Как написать веб-форму, чтобы с нее можно было отправлять письма? То есть простейший e-mail клиент. Aдреса будут доставаться из Микрософт SQL Server 2000.

Ответ

Вот выдрал из HELP'а:

Делаем почтовую программу

Давайте начнем с начала :) POP3 является третье версией POP (Post Office Protocol). Он (вместе с IMAP) является стандартным почтовым протоколом для получения почты через Сеть. Вам нужно знать только несколько вещей: имя пользователя, пароль, и адрес вашего почтового сервера. Для тех, кто использует dial-up подключение этот адрес выглядит приблизительно так: pop.ispname.com, где ispname — имя вашего провайдера. Это все, что вам нужно знать для использования почты, но если вы хотите что-то написать свое, вам нуужно понять, как это все работает.

Сначала вам нужно подсоединиться к правильному порту. Обычно это порт 110. Если вы знаете, что ваша ЛС (локальная сеть) использует другой порт, вам нужно использовать именно его, чтобы все работало.

Для этой статьи я использовал контрол Winsock. Теперь я расскажу в деталях про то, что делает Winsock. Winsock не предоставляет нам богатство свойств, но те, что он имеет, плюс методы и события делают его очень мощным контролом. В этой статья я опишу, как нужно подсоединяться к серверу через Winsock, но для этого вам нужно понимание всех комманд, которые я привожу. :)

Неплохой идеей для изучения комманд POP сервера является загрузка пробной версии MDaemon (http://mdaemon.com. Это очень неплохая программа, которая позволит вам изучить все комманды при работе с почтовым сервером.

Комманды

Перед тем, как отсылать данные, вам нужно послать ключевое слово, например USER, потом значение, а потом vbCrlf. Вот список доступных комманд:

USER — отсылает имя пользователя

PASS — отсылает пароль

QUIT — завершает сессию соединения

DELE — удаляет сообщение с сервера

RSET — отменяет все изменения, созданные за эту сессию

STAT — получает количество сообщений на сервере

RETR — получает содержимое сообщения

Если комманда проходит успешно, то вы получите ответ +OK от сервера. Если были какие-либо проблемы, то вы получите сообщение -ER. Вот пример кода, который отсылает имя пользователя:

Winsock1.SendData «USER Bob» & vbCrlf

Теперь, чтобы определить, что же мы получили от сервера, нам надо использовать событие Winsock1_DataArrival. Это событие не доставляет нам никаких данных, оно просто показывает нам, пришло ли какие данные и их размер. Мы должны использовать метод Winsock

1.GetData чтобы получить данные:

Private Sub WInsock1_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

Winsock1.GetData strData, vbString

WholeThing = WholeThing & strData

ResponseState = Left$(WholeThing, 3)

End Sub

Ошибки

Winsock также предоставляет событие Winsock1_Error. Это событие предоставляет огромное количество информации про ошибки, помогающие нам сказать пользователю, что же произошло. Вот пример события Winsock1_Error event:

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)

Msgbox «Error number: " & Number & vbCrlf & _

"Error Description: " & Description

End Sub

Что мне нравится в идеи написания собственного почтового клиента, так это то, что можно оставлять сообщения на сервере . Это может выглядить так: вы в дороге, проверяете почту и читаете ее, ответить на важные сообщения и/или удалить ненужные сообщения на сервере и отсоединиться, оставив остальную часть почты нетронутой. Это позволит вам загрузить все сообщения позже, на работе/дома. Вы можете даже расширить функциональность своей программы, добавив возможность сохранять вашу почту на HDD, для последующего ее прочтения.

Соединение

Теперь давайте проверим все на практике. Вставьте нижеприведенный код; я объясню, что он делает:

Private Function ConnectToPOP(strServer As String, _

strUser As String, strPwd As String)As Boolean

Dim strOut As String

ConnectToPOP = False

Winsock1.Connect strServer, 110 ' Измените порт, если это необходимо

WaitFor 1, strOut

If strOut = "+OK» Then

Winsock1.SendData «USER " & strUser & vbCrlf

Else

ConnectToPOP = False

Exit Function

End If

WaitFor 1, strOut

If strOut = "+OK» Then

Winsock1.SendData «PASS " & strPwd & vbCrlf

Else

ConnectToPOP = False

Exit Function

End If

WaitFor 1, strOut

If strOut = "+OK» Then

ConnectToPOP = True

Else

ConnectToPOP = False

End If

End Function

Запомните, после того, как мы отправим какие-либо данные, нам нужно подождать ответа. Я использовал для этого процедуру WaitFor. Сначала мы подсоединяемся, используя метод Winsock1.Connect, указывая имя сервера и порт. Потом мы ждем ответа, и проверим, чтобы ответ был +OK. Если ответ +OK, то мы отсылаем имя пользователя, используя комманду USER. И наконец, если ответ +OK, то мы отсылаем пароль. И если все это прошло успешно, то мы подключились к серверу!

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация