Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.18;
Скачать: CL | DM;

Вниз

IDPOP3 проблема чтения писем   Найти похожие ветки 

 
barbaroska   (2008-12-06 22:00) [0]

Пробую:

procedure TForm1.checkMail;
var
 i, mailcount: DWord;
 popMessage: TIdMessage;

 procedure exit_;
 begin
   popMessage.Free;
   if IdPOP.Connected then IdPOP.Disconnect;
 end;

begin
ShowMessage("1111");
 popMessage:= TIdMessage.Create(form1);
 try
   IdPOP.Connect;
   mailcount:= IdPOP.CheckMessages;
   for i := 0 to mailcount - 1 do begin
      if IdPOP.Retrieve(i, popMessage) then begin // Принимаем письмо
         ShowMessage(popMessage.Subject+"="+popMessage.Body.Text);
         IdPOP.Delete(i);
      end;
   end;
   IdPOP.Disconnect; exit_;
 except
   exit_;
 end;
end;

коннект происходит, показывает что есть письма на сервере, но
IdPOP.Retrieve(i, popMessage)
возвращает ложь..

гугл ничего не дал...
что может быть?


 
Johnnnn   (2008-12-06 22:18) [1]

Так непомню что к чему но попробуй в етом кучке I на 0 поменять
IdPOP.Retrieve(0, popMessage) или на 1 может выйжет че


 
bbk   (2008-12-06 22:44) [2]

Johnnnn, спасибо!

действительно:

i, mailcount: Integer;

заработало,

странно очень...


 
Johnnnn   (2008-12-06 22:51) [3]

Да там просто все после того как ты удаляеш письмо то следующему по списку присваивается его номер тоесть было 0 и 1 одно ты удалил и оставшемуся присвоился номер 0 а твой цикл спрашивает про 1 а такого нет уже ну вообщем както так. может и не так незнаю точно


 
bbk   (2008-12-06 23:00) [4]

да нет, на сервере одно письмо и было.
я просто поменял i с DWord на Integer как описано в Retrieve.

а вот насчет  IdPOP.Delete(i)  я кстати первым делом и подумал, но в найденом в нете примере так и было реализовано, пока не мог проверить из-за того что вообще прочитать не мог.

вероятно лучше сдель:

while idPOP.CheckMessages > 0 do begin
     if IdPOP.Retrieve(i, popMessage) then begin // Принимаем письмо
        ShowMessage(popMessage.Subject+"="+popMessage.Body.Text);
        IdPOP.Delete(0);
     end;
end;


 
Германн ©   (2008-12-07 00:33) [5]


> bbk   (06.12.08 23:00) [4]
>
> да нет, на сервере одно письмо и было.
> я просто поменял i с DWord на Integer

Ничего себе просто!
Пройди вот этот тест. И обрати внимание на вопрос №8.


 
bbk   (2008-12-07 00:59) [6]

"Пройди вот этот тест"  какой тест?

что-то я ничего не пойму с этим IdPOP.Retrieve

опять ничего не работает (:
возвращает что есть два письма, но ни IdPOP.Retrieve(0, popMessage) ни IdPOP.Retrieve(i, popMessage) не читает, возвращает ложь.
до этого все читалось, некоторые пробывал удалять..

function TIdPOP3.Retrieve(const MsgNum: Integer; AMsg: TIdMessage): Boolean;

такое ощущение, что MsgNum что-то другое, а не порядковый номер в колличестве писем на сервере.

погуглил опять безрезультатно..


 
bbk   (2008-12-07 01:10) [7]

вот что интересно, возвращает два письма.
при попытке прочитать IdPOP.Retrieve(0, popMessage) вовзращает ложь
при IdPOP.Retrieve(1, popMessage) читает
и при IdPOP.Retrieve(2, popMessage) читает

может нумерация там с 1 ? тогда что такое 0 (MsgNum) при котором читало..


 
bbk   (2008-12-07 01:21) [8]

POP3-RETR ( n -- a u ior ) - принимает число (номер письма) в качестве аргумента и возвращает строку с полным текстом письма, которое хранится на сервере под указанным номером, а также номер возможной ошибки ввода/вывода

Вот пример простого сеанса с POP3 сервером:
S: <создаём новое TCP соединение c POP3 сервером через порт 110>
S: +OK POP3 server ready
C: USER MonstrVB
S: +OK User MonstrVB is exists
C: PASS mymail
S: +OK MonsrVB"s maildrop has 2 messages (320 octets)
C: STAT
S: +OK 2 320
C: LIST
S: +OK 2 messages (320 octets)
S: 1 120
S: 2 200
S: .
C: RETR 1
S: +OK 120 octets
S:
S: .
C: DELE 1
S: +OK message 1 deleted
C: RETR 2
S: +OK 200 octets
S:
S: .
C: DELE 2
S: +OK message 2 deleted
C: QUIT
S: +OK dewey POP3 server signing off (maildrop empty)
C: <закрываем соединение>

из этого я так понимаю что нумерация с 1 все таки, и нумерация соответсвует пока не закрыт протокол.

правильно?


 
Германн ©   (2008-12-07 01:24) [9]


> bbk   (07.12.08 00:59) [6]
>
> "Пройди вот этот тест"  какой тест?
>
>

Пардон. Не вставил ссылку.
http://www.delphikingdom.com/quintana/quintana.asp?ItemID=10


 
Anatoly Podgoretsky ©   (2008-12-07 10:52) [10]

> bbk  (07.12.2008 0:59:06)  [6]

> такое ощущение, что MsgNum что-то другое, а не порядковый номер в колличестве писем на сервере.

А у тебя разуе номер письма, я лично вижу индекс.



Страницы: 1 вся ветка

Текущий архив: 2009.01.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1227381847
DillerXX
2008-11-22 22:24
2009.01.18
Помогите с регекспом (Perl-совместимым)


15-1227512397
nnov
2008-11-24 10:39
2009.01.18
звук sound blaster 5.1


2-1228379830
b@v
2008-12-04 11:37
2009.01.18
База данных


2-1228291866
b@v
2008-12-03 11:11
2009.01.18
MySQL &amp; Delphi


2-1228392234
linx
2008-12-04 15:03
2009.01.18
Лишние знаки после запятой при отображ. результ. запр.в DBGreed