При разработке почтового клиента на Indy10 TIdPOP3 столкнулся с проблемой "Connection Close Gracefully" побродив целый день по интернету
решение данной проблемы там так и ненашол. На одном из форумов нашол такой пост от Gradov:
|
"Столкнулся со следующей проблемой:
При использовании компонента TIdPOP3, когда происходит ошибка после вызова метода Connect() (например, неправильно указан пароль или логин), то после этого невозможно вызвать ни метод Disconnect(), ни метод Connect() снова.
При вызове Disconnect() возникает ошибка с сообщением "Connection Close Gracefully", а при вызове метода Connect пишет, что "Already connected".
То есть получается, что если возникает ошибка(исключение) при работе с TIdPOP3, то пользоваться эти компонентом в дальнейшем просто невозможно -- не закрыть соединение нельзя и открыть снова тоже нельзя.
Если у кого была подобная проблема, подскажите что делать?"
Этому бедолаге ответил всего один человек и то полный дебил - dumb:
"посмотри примеры работы с "индейскими" компонентами. читай до просветления F1 про try/catch"
В индейских примерах НИЧЕГО ПОДОБНОГО НЕТ, чтение до просветления про "try/catch" СМЫСЛА тоже НИКАКОГО НЕТ. |
Решение проблемы всётаки я нашол сам, всё оказалось проще простого:
|
var idPOP32: TIDPop3;
begin
idPOP32 := TIDPop3.Create;
try
idPOP32.Host:= getHostEmail(email);
idPOP32.Port := 110;
idPOP32.Username := email;
idPOP32.Password := passw;
idPOP32.ConnectTimeout := 10000 ;
idPOP32.Connect();
... удачный коннект...
IdPOP32.Disconnect;
idPOP32.Destroy;
except
...здесь обрабатывается неудачный коннект...
ShowMessage('ERR');
idPOP32.Destroy;
end;
end;
И теперь перед каждым обращением к почте нужно создавать idPOP32 := TIDPop3.Create;
и потом его уничтожать idPOP32 := TIDPop3.Create;
и больше НИКАКИХ сообщений об ошибочном пароле или логине Вас мучать небудут. |
|