На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: SCINER, B.V.
  
    > Почтовый клиент , на VB
      Сам я никогда не пытался это претворить в жизнь, предлагаю кому-нибудь попробовать. Сдесь изложен движок. Откуда взял не помню, сорри. Кажется, VBStreets.ru .

      Начало оригинального текста (автора тоже не знаю).
      ______________________________________________

      Делаем почтовую программу
      опубликовано: 09.12.2003 20:04

      Использование протокола POP3 (Post Office Protocol третьей версии).
      Давайте начнем с начала 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. Вот пример кода, который отсылает имя пользователя:

      ExpandedWrap disabled
        Winsock1.SendData "USER Bob" & vbCrlf


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



      ExpandedWrap disabled
        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:



      ExpandedWrap disabled
        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, для последующего ее прочтения.

      Соединение

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



      ExpandedWrap disabled
        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, то мы отсылаем пароль. И если все это прошло успешно, то мы подключились к серверу!


      _________________________
      конец оригинального текста.

      пользуйтесь наздоровье! :)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0188 ]   [ 16 queries used ]   [ Generated: 30.04.24, 21:02 GMT ]