Показать сообщение отдельно
  #2  
Старый 05.02.2014, 23:37
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Проверок на ошибки явно не хватает, вот что-то подобное
Код:
// Автор: Альф  (2006-01-11 12:42)
function CheckMailByUID(): integer;
var
 i: integer;
 path, msguid: string;
 filename: TFileName;
 amsglist: TIdMessageCollection;
begin
 result:= 0;
 path:= "D:\mail\inbox.msg\";
 IdIMAP.Connect();
 if IdIMAP.Connected
 then try
   if IdIMAP.SelectMailBox("INBOX")
   then try
     amsglist := TIdMessageCollection.Create(TIdMessageItem);
     if IdIMAP.UIDRetrieveAllEnvelopes(amsglist)
     then begin
       for i := 0 to amsglist.Count -1 do begin
         Application.ProcessMessages();

         msguid := (amsglist.Items[i] as TIdMessageItem).IdMessage.UID;
         if IdIMAP.UIDRetrieve(msguid, IdMessage)
         then begin
           filename := MsgIdToFileName(IdMessage.MsgId);
           IdMessage.SaveToFile(path + filename);

           if FileExists(path + filename)
           then begin
// После этого можно со спокойной совестью удалять письмо из ящика
             if not IdIMAP.UIDDeleteMsg(msguid)
             then begin
// Ошибка - Удаление не прошло
             end;
             result := result + 1;
           end else begin
// Ошибка - Сохранить не получилось
           end;
         end else begin
// Ошибка - Не получилось принять сообщение # + IntToStr(i)
         end;
       end;
// Перепаковать выбраный ящик
       if not IdIMAP.ExpungeMailBox()
       then begin
// Ошибка - Ликвидация провалилась
       end;
     end else begin
     end;

   finally
     amsglist.Free();
   end else begin
// Ошибка - Не удалось выбрать почтовый ящик
   end;
 finally
   IdIMAP.Disconnect();
 end else begin
// Ошибка - Не удалось подключиться к IMAP4
 end;
end;
Ответить с цитированием