Delphi6 Proffesional on WindowsXP SP3です。
メールソフトを作っています。
Delphi付属のNMPOP3コンポーネントの例外処理がうまくいきません。
例えば、メールアドレスが違っていた場合、AuthenticationFailedで
Handledをtrueに設定していても、NMPOP3のTimeOutプロパティに設定した
時間経過後にAuthentication failedの例外が発生してしまいます。
また、サーバ名が違っていた場合はいきなリHost Loookuo errorになり
タイムアウト後にHost Lookup Timeoutと2回例外が発生します。
これらを処理するにはどうしたらいいでしょうか?
どういう動作が希望なの?
> どういう動作が希望なの?
ケース1:サーバ名が無効な時
ケース2:メールアドレス・パスワードが無効な時
実行時エラーを出さずに、MessageDlgで通知するようにしたいのです。
NMPOP3は不可解。
失敗するとアプリを終了できなくなることがある。
var
FailedNo: Integer;
procedure TForm1.Button1Click(Sender: TObject);
var
C: TClass;
begin
...........
NMPOP31.TimeOut := 3000;
C := ExceptionClass;
ExceptionClass := EAbort;
FailedNo := 0;
try
try
NMPOP31.Connect;
except
on E:Exception do begin
case FailedNo of
0: ShowMessage('エラー(HostLookupFailed): ホスト接続に失敗');
1: ShowMessage('エラー(AuthenticationFailed): ユーザー認証に失敗');
end;
end;
end;
finally
ExceptionClass := C;
end;
end;
procedure TForm1.NMPOP31AuthenticationFailed(var Handled: Boolean);
begin
FailedNo := 1;
NMPOP31.Abort;
end;
ご指摘のように、何か失敗するとアプリケーションが終了できなくなるのも困っていた点です。
教えていただいたコードを試してみます。ありがとうございました。
ご指摘いただいた方法でうまくいきそうです。ありがとうございました。昔のTurboPASCALのように$-IでIOResultでできるかと思っていました。
とりあえず解決とします。
解決チェックを忘れました。
ツイート | ![]() |