<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=71584&amp;view=findpost&amp;p=502042</guid>
        <pubDate>Thu, 04 Nov 2004 22:10:56 +0000</pubDate>
        <title>Почтовый клиент</title>
        <link>https://forum.sources.ru/index.php?showtopic=71584&amp;view=findpost&amp;p=502042</link>
        <description><![CDATA[SO: Сам я никогда не пытался это претворить в жизнь, предлагаю кому-нибудь попробовать. Сдесь изложен движок. Откуда взял не помню, сорри. Кажется, VBStreets.ru .<br>
<br>
Начало оригинального текста (автора тоже не знаю).<br>
______________________________________________<br>
<br>
<strong class='tag-b'> Делаем почтовую программу  <br>
опубликовано: 09.12.2003 20:04 <br>
<br>
Использование протокола POP3 (Post Office Protocol третьей версии).  <br>
Давайте начнем с начала  POP3 является третье версией POP (Post Office Protocol). Он (вместе с IMAP) является стандартным почтовым протоколом для получения почты через Сеть. Вам нужно знать только несколько вещей: имя пользователя, пароль, и адрес вашего почтового сервера. Для тех, кто использует dial-up подключение этот адрес выглядит приблизительно так: pop.ispname.com, где ispname -- имя вашего провайдера. Это все, что вам нужно знать для использования почты, но если вы хотите что-то написать свое , вам нужно понять, как это все работает. <br>
Сначала вам нужно подсоединиться к правильному порту. Обычно это порт 110. Если вы знаете, что ваша ЛС (локальная сеть) использует другой порт, вам нужно использовать именно его, чтобы все работало. <br>
Для этой статьи я использовал контрол Winsock. Теперь я расскажу в деталях про то, что делает Winsock. Winsock не предоставляет нам богатство свойств, но те, что он имеет, плюс методы и события делают его очень мощным контролом. В этой статья я опишу, как нужно подсоединяться к серверу через Winsock, но для этого вам нужно понимание всех комманд, которые я привожу.  <br>
Неплохой идеей для изучения комманд POP сервера является загрузка пробной версии MDaemon (http://mdaemon.com). Это очень неплохая программа, которая позволит вам изучить все комманды при работе с почтовым сервером. <br>
Команды Перед тем, как отсылать данные, вам нужно послать ключевое слово, например USER, потом значение, а потом vbCrlf. Вот список доступных комманд: <br>
<br>
USER - отсылает имя пользователя <br>
PASS - отсылает пароль <br>
QUIT - завершает сессию соединения <br>
DELE - удаляет сообщение с сервера <br>
RSET - отменяет все изменения, созданные за эту сессию <br>
STAT - получает количество сообщений на сервере <br>
RETR - получает содержимое сообщения <br>
<br>
Если комманда проходит успешно, то вы получите ответ +OK от сервера. Если были какие-либо проблемы, то вы получите сообщение -ER. Вот пример кода, который отсылает имя пользователя: <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Winsock1.SendData &quot;USER Bob&quot; &amp; vbCrlf</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Теперь, чтобы определить, что же мы получили от сервера, нам надо использовать событие Winsock1_DataArrival. Это событие не доставляет нам никаких данных, оно просто показывает нам, пришло ли какие данные и их размер. Мы должны использовать метод Winsock1.GetData чтобы получить данные: <br>
<br>
 <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Private Sub WInsock1_DataArrival(ByVal bytesTotal As Long) Dim strData As String </div><div class="code_line">Winsock1.GetData strData, vbString WholeThing = WholeThing &amp; strData </div><div class="code_line">ResponseState = Left$(WholeThing, 3) </div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
 <br>
<br>
Ошибки <br>
<br>
Winsock также предоставляет событие Winsock1_Error. Это событие предоставляет огромное количество информации про ошибки, помогающие нам сказать пользователю, что же произошло. Вот пример события Winsock1_Error event: <br>
<br>
 <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Private Sub Winsock1_Error(ByVal Number As Integer, _ </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Description As String, _</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ByVal Scode As Long, _ </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ByVal Source As String, _</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ByVal HelpFile As String, _ </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ByVal HelpContext As Long, _</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CancelDisplay As Boolean) </div><div class="code_line">Msgbox &quot;Error number: &quot; &amp; Number &amp; vbCrlf &amp; _ &quot;Error Description: &quot; &amp; Description </div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
 <br>
<br>
Что мне нравится в идеи написания собственного почтового клиента, так это то, что можно оставлять сообщения на сервере . Это может выглядить так: вы в дороге, проверяете почту и читаете ее, ответить на важные сообщения и/или удалить ненужные сообщения на сервере и отсоединиться, оставив остальную часть почты нетронутой. Это позволит вам загрузить все сообщения позже, на работе/дома. Вы можете даже расширить функциональность своей программы, добавив возможность сохранять вашу почту на HDD, для последующего ее прочтения. <br>
<br>
Соединение <br>
<br>
Теперь давайте проверим все на практике. Вставьте нижеприведенный код; я объясню, что он делает: <br>
<br>
 <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Private Function ConnectToPOP(strServer As String, _</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strUser As String, _</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strPwd As String)As Boolean </div><div class="code_line">Dim strOut As String </div><div class="code_line">ConnectToPOP = False </div><div class="code_line">Winsock1.Connect strServer, 110 &#39; Измените порт, если это необходимо WaitFor 1, strOut </div><div class="code_line">If strOut = &quot;+OK&quot; Then </div><div class="code_line">&nbsp;&nbsp; &nbsp;Winsock1.SendData &quot;USER &quot; &amp; strUser &amp; vbCrlf </div><div class="code_line">Else </div><div class="code_line">&nbsp;&nbsp; &nbsp;ConnectToPOP = False </div><div class="code_line">&nbsp;&nbsp; &nbsp;Exit Function </div><div class="code_line">End If </div><div class="code_line">WaitFor 1, strOut </div><div class="code_line">If strOut = &quot;+OK&quot; Then </div><div class="code_line">&nbsp;&nbsp; Winsock1.SendData &quot;PASS &quot; &amp; strPwd &amp; vbCrlf </div><div class="code_line">Else </div><div class="code_line">&nbsp;&nbsp; ConnectToPOP = False </div><div class="code_line">&nbsp;&nbsp; Exit Function </div><div class="code_line">End If </div><div class="code_line">WaitFor 1, strOut </div><div class="code_line">If strOut = &quot;+OK&quot; Then </div><div class="code_line">&nbsp;&nbsp; ConnectToPOP = True </div><div class="code_line">Else </div><div class="code_line">&nbsp;&nbsp; ConnectToPOP = False </div><div class="code_line">End If </div><div class="code_line">End Function</div></ol></div></div></div></div><br>
 <br>
<br>
Запомните, после того, как мы отправим какие-либо данные, нам нужно подождать ответа. Я использовал для этого процедуру WaitFor. Сначала мы подсоединяемся, используя метод Winsock1.Connect, указывая имя сервера и порт. Потом мы ждем ответа, и проверим, чтобы ответ был +OK. Если ответ +OK, то мы отсылаем имя пользователя, используя комманду USER. И наконец, если ответ +OK, то мы отсылаем пароль. И если все это прошло успешно, то мы подключились к серверу&#33; <br>
<br>
</strong><br>
_________________________<br>
конец оригинального текста.<br>
<br>
пользуйтесь наздоровье&#33;  :)]]></description>
        <author>SO</author>
        <category>Сети, Интернет, почта</category>
      </item>
	
      </channel>
      </rss>
	