Долгое время назад я написал следующий код для получения писем из почтового ящика:Исключение генерируется дважды TNMPOP3.Connect
pop3 := TNMPOP3.Create(Self);
try
pop3.Host := FAppSettings.ServerName;
pop3.Port := FAppSettings.ServerPort;
pop3.UserID := FAppSettings.Login;
pop3.Password := FAppSettings.Password;
try
pop3.Connect;
except
on E:Exception do AddError(E.Message);
end;
if not pop3.Connected then Exit;
if pop3.MailCount > 0 then begin
pop3.DeleteOnRead := False;
pop3.AttachFilePath := GetTempDirectory;
ProcessMsgs(pop3);
end
else begin
TCommon.InfMsg('There are no messages in mailbox');
end;
pop3.Disconnect;
finally
pop3.Free;
end;
Теперь, когда поставщик почтовой службы полностью переключился на SSL этот код не очевидно, но как-то странно путь:
строка вызывает исключение, но с пустым текстом в E.Message, что делает проблему непонятной для конечного пользователя.
Исследование задачи в Delphi отладчик показывает, что первый раз право генерируется исключение:
Project .... поднятый исключение класса Exception с сообщением «Ошибка аутентификации».
, но потом, когда я нажимаю F8 (Step Over) еще раз, точка выполнения остается в той же строке, а другое генерируется исключение:
Project .... поднятое исключение класса Exception с сообщением ' ».
и только это исключение улавливается try-except
.
Почему?
Посмотрите на код 'TNMPOP3', причина должна быть там –
@Sir Rufo: У меня нет исходного кода для' TNMPOP3' – Paul
. После некоторого поиска в Google кажется, что компоненты FastNet немного багги (дружеские разговоры), и вы должны подумать об использовании другой библиотеки. Из-за Delphi 6 взгляните на http://synapse.ararat.cz –