Если Вы используете компоненты TIdPOP3 и TIdMessage, то переходите на более высокий уровень программирования (по сравнению с TClientSocket и TIdTCPClient).
В Делфи7 входит версия 9 библиотеки компонентов Indy. (новые версии см. http://indy.nevrona.com) ---- Описание работы программы: ------ Применяется декодирование, но здесь не обсуждается. (Form2.2FormCreate) 1. При запуске создает папку для почты, имя которой содержит дату и время 2. Проверяет наличие папки IniDir, если нет - создает 3. Проверяет, при отсутствии создает файлы Logins.txt Hosts.txt 4. При наличии файлов Logins.txt Hosts.txt загружает из них списки в ComboBox --------- 5. Показывает Form2. Пользователь задает Host, Port, Login, Password 6. и жмет кнопку Подключиться (Button1) (Form2.Button1Click) 7. Устанавливает значения свойств Host, Port, Username, Password компонента POP31(TIdPOP3) и вызывает его метод .Connect 8. С помощью метода .CheckMessages получает NumMsg - количество сообщений в ящике. 9. Если NumMsg<=0 разрывает соединение: IdPOP31.Disconnect 10. Вызывает метод Form1.AfterConn (Form1.AfterConn) 11. Создается объект М класса TIdMessage и объект SL (TStringList) 12. Цикл по сообщениям: - IdPOP31.RetrieveHeader помещает очередной заголовок в М. - SL заполняется полями заголовка очередного сообщения (From, To, Subject, Date, Content-Type) . - выделяются поля заголовка: От_кого, Кому, сохраняются в OtKogoS, KomuS. - заполняется очередная строка таблицы viewZAgl значениями OtKogoS, KomuS, а также поля: Subject, Date, Size (Size возвращается методом IdPOP31.RetrieveMsgSize), Content-Type. 13. Освобождаются объекты М, SL. -------- 14. Показывает Form1. ------- (Form1.FormCreate) 15. Подготавливается Компонент viewZAgl: TListView. (заполняются заголовки). --------- 16. В таблице viewZAgl пользователь отмечает сообщения, которые нужно получить и жмет кнопку Получить выбранные письма (btnChecked) (можно также отметить удаляемые из ящика сообщения, выделив нужные строки). Что делает btnCheckedClick ? 17. Создает невидимый вспомогательный объект Memo1. 18. Создает объекты M (TIdMessage) и SL (TStringList); 19. Цикл по всем сообщениям: - Если сообщение отмечено (viewZAgl.Items[ii].Checked) в таблице viewZAgl, то *) повторно извлекаются значения полей заголовка (From, To, Subject, Date, Content-Type) а также поля Content-Transfer-Encoding *)Меняется иконка этой строки (обозначает - обработано) *)Создается имя подкаталога DirNam для этого сообщения. *)Создается папка DirNam и она становится текущей *)Если выбрано Сохранять заголовки сообщений, то в файле Headers.txt сохраняется заголовок сообщения. *) Если сообщение не имеет частей, то: +) тело сообщения копируется в SL.Text +) SL сохраняется в файле Body.htm или Body.txt иначе сообщение сохраняется по частям. 20. Цикл по всем сообщениям: - Если сообщение выделено (viewZAgl.Items[ii].Selected) в таблице viewZAgl, то удалить его ( form2.IdPOP31.Delete(ii+1); ) ВЫВОД: Использование компонентов TIdPOP3 и TIdMessage облегчает программирование. Используются: TIdPOP3: .Port, .Host, .Username, .PassWord, .Connect, .Connected, .Disconnect, .CheckMessages - количество сообщений в ящике на сервере, .RetrieveHeader(ii, M: TIdMessage) - ii - номер сообщения, М - хранит заголовок, .RetrieveMsgSize(ii) - размер ii-го сообщения, .Retrieve(ii+1, M) - всё сообщение, т е заголовок и все части помещаются в М, .Delete(ii) - удаляет ii-е сообщение, .OnStatus-(IdPOP31Status) - событие (изменение статуса соединения) ----------- TIdMessage: .Clear, .Headers.ConvertToStdValues, .Free, .Create, .MessageParts.Count, .MessageParts.Items[jj],Скачать RAR-архив исходников + .exe(420 Кб)