Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2020, 03:00   #1
KAPTOH
 
Регистрация: 04.03.2020
Сообщений: 6
Печаль Как победить Connection Closed Gracefully в IMAP

Есть код, потоковый Imap, будет в данном примере рассматривать приложение как 1 поток. передаю туда Host, port, email, pass и пытаюсь подключиться, ниже execute

Код:
  Imap := TIdIMAP4.Create(nil);
  Imap.Username := email;
  Imap.Port := 993;
  Imap.Password := pass;
  Imap.ConnectTimeout := Check.TimeOut;
  Imap.ReadTimeout:= Check.TimeOut;
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(imap);
  Imap.IOHandler := SSL;
  Imap.UseTLS := utUseImplicitTLS;
  SSL.ReadTimeout := Check.TimeOut;
  SSL.ConnectTimeout := Check.TimeOut;

// делаю проверку
try
      Imap.Connect(True);
      if Imap.Connected then
      begin
        ErrNum := -1;
        Break;
      end;

  on e: Exception do
    begin
      ErrorText:= Imap.GetResponse+'=>'+e.ClassName+'->'+e.Message;




      if Pos('AUTHENTICATIONFAILED',e.ClassName)>0 then
      begin
      ErrNum:=0;
      Exit;
      end;

      if
      (Pos('Connection refused',e.message)>0) or
      (Pos('Socks server did not respond',e.message)>0)
      then
        begin
        ErrNum:=1;
        Break;
        end;

      if Pos('Host not found',e.message)>0 then
      begin
      ErrNum:=2;
      inc(imap_n);
      Continue;
      end;

      if
      (Pos('Read timed out',e.message)>0) or
      (Pos('Connect timed out',e.message)>0) then
      ErrNum:=3;
    end;
и в конце поток приходит сюда

Код:
procedure Checker.TermChecker(Sender: TObject);
var
th: THR_CHECKER absolute Sender;
begin
if th.FatalException <> nil then MainForm.sMemo1.Lines.Add('Fatal: '+th.FatalException.ClassName+'->'+th.FatalException.ToString);
MainForm.sMemo1.Lines.Add(th.ImapString);
  with MainForm do
  case th.ErrNum of
  -1: sMemo1.Lines.Add( th.email+':'+th.pass+'-> Good Acc' );
  0: sMemo1.Lines.Add( th.email+':'+th.pass+'-> Bad acc' );
  1: sMemo1.Lines.Add( th.email+':'+th.pass+'-> proxies failed' );
  2: sMemo1.Lines.Add( th.email+':'+th.pass+'-> bad imap' );
  3: sMemo1.Lines.Add( th.email+':'+th.pass+'-> connection time out' );
  4: sMemo1.Lines.Add( th.email+':'+th.pass+'-> Connection Closed Gracefully' );
  else
    sMemo1.Lines.Add( th.email+':'+th.pass+'-> Strange error:'+th.ErrorText );
  end;

if NumAccount >= MainBase.Count-1 then ShowMessage('Stopped') else CreateChecker;
end;
Но почему-то ошибка крашит поток в Fatal, а не обрабатывается как Exception, может кто знает? Может кто-то поможет избавиться от этого паразита?) Знаю что это не ошибка, а уведомление и есть оно в отладчике, но мне так-то нужно работать с почтой, поэтому нужно убрать это как-то
KAPTOH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
connection closed gracefully aesoem Работа с сетью в Delphi 9 28.10.2016 19:11
Connection Closed Gracefully KoBaL Работа с сетью в Delphi 12 20.02.2015 08:43
Connection Closed Gracefully Bataxe Работа с сетью в Delphi 9 13.10.2013 18:30
Connection Closed Gracefully. idhttp jone Работа с сетью в Delphi 0 28.08.2011 15:44
connection closed gracefully foma9999 Общие вопросы Delphi 21 14.02.2011 16:15