четверг, 7 февраля 2013 г.

Delphi Indy 10 POP3 Пример

Простой пример обработки входящей почты с использованием POP3 компонент Indy10 для Delphi 7

(практическая задача была: обработать уведомления о доставке)

на форме компоненты:

  IdPOP3: TIdPOP3;
  IdMessage: TIdMessage;


Ниже: текст процедуры


...
var
  msgs: integer;
  i: integer;
  flag: boolean;

  msgcnt: integer;
begin
  IdPOP3.Host:= 'XXXX';
  IdPOP3.Username:= 'XXXX';
  IdPOP3.Password:= 'XXXX';
  IdPOP3.Port:= 110;

  IdPOP3.Connect;
  try
    msgcnt:= IdPOP3.CheckMessages;
    
    for I:= msgcnt to 1 do
    begin
      IdMessage.Clear;
      flag:= false;

      if (IdPOP3.Retrieve(i, IdMessage)) then
      begin
        ProcessMessage(IdMessage.From.Address, IdMessage.Subject);        
        flag:= true;        
      end;
      if flag then
      begin
        IdPOP3.Delete(i); //удаление письма
      end;
    end;    
  finally
    IdPOP3.Disconnect;
  end;
end;


UPD если нужно извлечь текст сообщения, может помочь такой код

var
  locBody: string;
...

        if (locBody = '') then
        begin
          for j:= 0 to IdMessage.MessageParts.Count - 1 do
          begin
            if (IdMessage.MessageParts[j] is TidText) then
            begin
              locBody:= (IdMessage.MessageParts[j] as TidText).Body.Text;
              if locBody <> '' then break;
            end;
          end;
        end;
...


Вопросы/пожелания/предложения оставляйте в комментариях.

см. также

Отправка почты через Smtp компоненты Indy10 в Delphi7
http://dev-doc.blogspot.com/2012/08/delphi-indy-10.html


За основу взял код на стековерфлоу
http://stackoverflow.com/questions/5336984/how-to-receive-emails-using-indy-10-and-delphi-7-with-the-file-attachment

Еще один простой пример
http://www.lazarus.freepascal.org/index.php?topic=17626.0

2 комментария: