## SocketClient пример POP3-сессии.

© Терехов А В. 2003

### Вступление

Здесь рассматривается практическое применение программирования сокетов на примере POP - сессии (получение писем от почтового сервера). Прежде рекомендуется прочитать статью SoketClient для непродвинутых - вся теория там. Кроме этого неплохо прочитать спецификацию RFC 1939, которая приложена к примеру.
Часть кода в примере списана с программного кода компонента:

    TCP/IP Component Pack  (Version 0.2beta of 1997-06-30)
    ah@scp.de                (at work)
    andreas@hoerstemeier.de  (at home)
    http://www.westend.de/~hoerstemeier
    snail mail: Andreas Horstemeier
                Mefferdatisstrasse 16-18
                52062 Aachen
                Germany

В компоненте было использовано побайтное чтение из сокета. В примере чтение происходит через буфер размером 1024 байта, что по моему мнению значительно увеличивается производительность чтения почты, а, следовательно, уменьшает время Dial-Up.

### Как работать

1. В окне pop3 сервер вводим имя почтового сервера. Я пользуюсь, например, pop.online.ru
2. Жмем кнопку Connect и ждем ответа почтового сервера. Если все хорошо, сервер ответит с индикатором +OK, в этом случае кнопка Login станет доступной. Если проблемы, то сервер ответит с индикатором -ERR.
3. Вводим имя пользователя, пароль и жмем кнопку Login. Произойдет сеанс аутентификации, результаты которого будут видны в лог-окне. Если все в порядке, то станет доступной кнопка List и сервер сообщит, что почтовый ящик готов к сеансу, а также укажет количество писем в почтовом ящике.
4. Жмем кнопку List. Сервер укажет, сколько писем лежит в почтовом ящике и их размеры в октетах.
5. Далее станут доступны:
   - флажок "все письма" и окно для выбора конкретного письма - здесь следует выбрать либо конкретное письмо по его номеру, либо отметить галкой "все письма" и выполнять действия над всеми письмами сразу;
   - кнопка Top - просмотр заголовков писем, окно "строки" указывает, сколько строк письма считать вместе с заголовком;
   - кнопка Mail - получение писем;
   - кнопка Del - удаление писем;
   - кнопка Logout - завершение сеанса.
   При получении заголовков или самих писем можно пользоваться радиокнопками KOI-8R и Win-1251. В этом случае строки, получаемые от сервера, буду перекодированы в нужный формат.
6. В главном меню "Файл" можно пользоваться опциями:
   - Открыть - загрузить ранее сохраненный лог сеанса в лог-окно;
   - Сохранить - сохранить лог сеанса в файл;
   - Сохранить фрагмент - сохранить отдельное письмо с последующим его открытием в почтовой программе:
     1. Выделяете фрагмент лога от начала письма до завершающей точки.
     2. В главном меню выбираете "Файл"-"Сохранить фрагмент" и сохраняете фрагмент с расширением eml.
     3. Теперь письмо можно открыть любой почтовой программой.
   Для правильной перекодировки письма почтовой программой:
   при загрузке тела письма в лог-окно должна быть отмечена радиокнопка Win-1251.
7. Кнопка Clear очищает окно лога.

Пример полезен для понимания работы сокетов, а также изучения общения почтовых клиента и сервера по протоколу POP3. Для полного понимания текстов полученных писем необходимо изучить спецификацию MIME (RFC 2045, 2046, 2047).