Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

У кого такое было с pop3. Зависает.


Den ©   (2013-10-29 12:38:00) 

Есть код.
procedure TForm1.Button1Click(Sender: TObject);
var
 MsgCount : Integer;
 i        : Integer;
 FMailMessage :  TIdMessage;codses:TSmsFromWm;
 
begin
IdPOP31.Host      := 'pop.mail.ru';
IdPOP31.Username  := 'user';
IdPOP31.Password  := 'pass';
IdPOP31.Port      := 995;
IdPOP31.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(self);
IdPOP31.UseTLS := utUseExplicitTLS;
IdPOP31.ConnectTimeout := 4500;
try
  IdPOP31.Connect();
  MsgCount := IdPOP31.CheckMessages;
  for i:= 0 to MsgCount do   begin
try
   FMailMessage := TIdMessage.Create(nil);
   IdPOP31.Retrieve(i,FMailMessage);
   Memo1.Lines.Add(FMailMessage.Body.Text);
 finally
 FMailMessage.Free;
 end;
end;
finally  
   IdPOP31.Disconnect;
end;
end;
ну в общем обыкновенный код вот такой, по всему инету он лежит, пробовал его на 2ух машинах, на обеих ведет себя одинаково,  при первом нажатии на кнопку, отрабатывает как надо, при повторном, просто зависает и не выдавая никаких сообщений об ошибках так и висит минут 5. Если один раз нажать на кнопу, получить сообщения затем закрыть приложение и снова нажать на кнопку, коннектится нормально, следовательно проблема не с ограничениями со стороны сервера. Что это может быть?


Den   (2013-10-29 16:28:00) [1]

ну это так можно
IdPOP31.IOHandler.free;
if IdPOP31.connected then   IdPOP31.Disconnect;
только проблему оно все равно не решает...


Anatoly Podgoretsky   (2013-10-29 15:49:00) [2]

Теперь обработчик не освобожден.
Странный вообще то код, одни ошибки. Так же и этот код, что например будет в Disconnect если Connect не произошел?


Den   (2013-10-29 15:15:00) [3]

глянул, да, нумерация с единицы, лишний запрос, получается, вот и висит. - в смысле вот и? а что если for i:= 1 поставить то не висит? у меня висит и так и так, на 2ух компах и на 2ух pop3 серверах разных сервисов. даже больше, если только так оставить
IdPOP31.Host      := 'pop.mail.ru';
IdPOP31.Username  := 'user';
IdPOP31.Password  := 'pass';
IdPOP31.Port      := 995;
IdPOP31.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(self);
IdPOP31.UseTLS := utUseExplicitTLS;
IdPOP31.ConnectTimeout := 4500;
try
 IdPOP31.Connect();
finally  
  IdPOP31.Disconnect;
end;

без вытягивания сообщений, оно все равно зависает.


Туповатый   (2013-10-29 15:03:00) [4]

глянул, да, нумерация с единицы, лишний запрос, получается, вот и висит. впрочем, в любом случае необходимо регулировать время, а не убивать сходу.


Туповатый   (2013-10-29 14:56:00) [5]


> нумерация может быть с единицы

тогда
> for i:= 1


Den   (2013-10-29 14:52:00) [6]

т.е. то, что при MsgCount = 2 будет три запроса, не смущает?

Я не исключаю, что нумерация может быть с единицы (не имел дела с инди)- если честно не вникал, но так вышло что в ящике одно письмо и если по привычке поставить -1 (как я и сделал в начале) то письмо вытянуто не будет.


MBo   (2013-10-29 14:48:00) [7]

>for i:= 0 to MsgCount - 1 - не вытянет последнее сообщение.

т.е. то, что при MsgCount = 2 будет три запроса, не смущает?

Я не исключаю, что нумерация может быть с единицы (не имел дела с инди)


Den   (2013-10-29 14:31:00) [8]

for i:= 0 to MsgCount - 1 - не вытянет последнее сообщение.
добавь еще кнопку, на нее принудительный дисконнект и посмотри. - не помогает. воще проблему то я решил уже, через tThread убиваю его после каждой проверки и все ок, но всетаки интересно что такое, а да еще, на 110 пору работает без проблем.


Туповатый   (2013-10-29 14:13:00) [9]

добавь еще кнопку, на нее принудительный дисконнект и посмотри.


MBo   (2013-10-29 13:31:00) [10]

Вряд ли это имеет отношение к проблеме, но неаккуратненько как-то:
for i:= 0 to MsgCount - 1


Den   (2013-10-29 12:56:00) [11]

добавил IdPOP31.IOHandler.free; если вы это имели в виду, ведет себя так же, первый раз нормально, второй и все последующие висит.


Кщд   (2013-10-29 12:43:00) [12]

>Den   (29.10.13 12:38)
освобождать надо всё, что создали


Наверх

Титульная страница Поиск, карта сайта Написать письмо