Если Вы используете компоненты 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 Кб)