![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет!
Есть такая программка, которая будет через imap4 обрабатывать входящие сообщения, и затем удалять. Код:
var
i: integer;
begin
IdIMAP41.Host := 'host';
IdIMAP41.Port := 993;
IdIMAP41.Username := 'login';
IdIMAP41.Password := 'pass';
IdIMAP41.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdIMAP41);
IdIMAP41.UseTLS := utUseImplicitTLS;
IdIMAP41.Connect;
idIMAP41.SelectMailBox('INBOX');
for i := 1 to IdIMAP41.MailBox.TotalMsgs do
begin
idIMAP41.Retrieve(i, idMessage1);
Memo1.Text := Memo1.Text+'Тема: '+idMessage1.Subject+#13#10+'Отправитель: '+idMessage1.From.Text+#13#10+'Сообщение: '+idMessage1.Body.Text+#13#10+'---///---'+#13#10;
idIMAP41.DeleteMsgs(i);
idIMAP41.ExpungeMailBox;
end;
IdIMAP41.Disconnect;
IdIMAP41.IOHandler.Free;
end;
end.Сейчас работает так: обрабатываются первые несколько писем и удаляются, а остальные остаются. |
|
#2
|
||||
|
||||
|
Проверок на ошибки явно не хватает, вот что-то подобное
Код:
// Автор: Альф (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; |
|
#3
|
|||
|
|||
|
В общем замут в IDшниках сообщений.
Поменял Код:
for i := 1 to IdIMAP41.MailBox.TotalMsgs do Код:
for i := IdIMAP41.MailBox.TotalMsgs downto 1 do |