Принимаем почту средствами Delphi
На главную
 

Зарабатывай на своем сайте размещением рекламы используя
Popunder.ru

подробнее ...

 
Реклама
 
Книги
В разделе Книги смотрите лучшие книги по Delphi
искать на Books.Ru:
Партнеры

 

 

 

 

 

 

 

 

 


 

 

 

 

 



Принимаем почту средствами 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г.

 
 

 



 

 

"."
 
 

 



© Delphi: избранное
© Владимир Богдановский 2005-2011 гг.
bogdan_we@mail.ru
ICQ 337 311 969

PRCY-info.ru, анализ сайтов bigmir)net TOP 100 Rambler's Top100 Яндекс.Метрика

WebList.Ru Яндекс цитирования Каталог ИТ