Принимаем почту средствами Delphi
Для этой задачи мы будем использовать компонент
TIdPOP3 со страницы Indy Clients и с этой же страницы компонент TIdMessage.
Компонент TIdPOP3 решает вопросы коммутации с почтовым сервером, а компонент TIdMessage нужен как элемент структуры электронного письма, о котором понятно будет позже, при описании его основных методов.
Сначала разберем коммутацию нашего приложения к серверу. Будем безжалостно использовать для этой цели компонент TIdPOP3, которому мы дадим имя POP.
Настроим сначала почтовый сервер в нашем компоненте:
POP.Host:= 'pop.mail.ru';
Здесь можно использовать и IP адрес вместо доменного имени сервера. Далее будем подключаться к стандартному порту почтового сервера с номером 110:
POP.Port:= 110;
Указываем название ящика, с которого будем забирать почту
POP.Username:= 'delphi-ex';
и убедившись, что посторонних нет рядом, забиваем свой пароль этой учетной записи:
POP.Password:= 'qwerty';
Затем начинаем подключать наше приложение к серверу, для этого используем метод
POP.Connect;
Если подключение прошло удачно, то свойство POP.Connected станет равно True, если нет – то False.
Теперь о процессе приема почты.
Подключившись к серверу, первым делом проверяем количество писем на сервере, используя функцию
function CheckMessages: longint;
которая возвращает число - количество писем:
var
MsgCount: integer;
…..
MsgCount:=POP.CheckMessages;
Теперь, когда мы знаем количество писем на сервере, то можно их смело забирать, для этого используем метод:
var
i:integer;
……
POP.Retrieve(i,Msg);
Здесь переменная i – это номер письма на сервере, Msg - в нашем проекте имя компонента TIdMessage, который представляет собой структуру письма, заполняемого при приеме почты с сервера. Если составить следующий цикл, то можно получить все письма с сервера:
for i:=1 to MsgCount do
begin
Msg.Clear;
POP.Retrieve(i,Msg);
end;
Нужно обратить внимание, что компонент Msg очищается каждый раз для очередного письма. После того, как мы приняли электронное письмо, объект Msg уже содержит всю структуру письма, а именно:
Msg.Subject – тему письма,
Msg.Date - дату отправки письма
Msg.From.Address – адрес отправителя
Msg.Body – тело письма
Сразу оговорю тот момент, что при приеме почты нужно анализировать структуру письма, т.е свойство объекта TIdMessage:
property ContentType: string;
которое характеризует формат электронного почтового сообщения - Multipurpose Internet Mail Extensions (MIME). ContentType может иметь значения:
text/plain
text/html
text/xml
text/enhanced
image/jpeg
image/gif
audio/basic
audio/au
video/mpeg
application/octet-stream
application/postscript
application/ms-word
application/ms-excel
application/rtf
multipart/mixed
multipart/alternative
multipart/parallel
multipart/related
message/rfc822
message/external-body
Свойство Msg.Body будет содержать текст письма, в случае, если ContentType представляет собой разновидность текстового содержимого, т.е. text/plain, text/html, text/xml, или text/enhanced. это отдельная подтема и её нужно отдельно изучить.
Удалить письмо с сервера можно методом Delete:
POP.Delete(i);
После приема почты нужно не забыть отсоединиться от почтового сервера методом
POP.Disconnect;
02 февраля 2008г.