NMPOP3の例外発生を処理するには?

解決


RYO  2009-04-26 13:38:06  No: 34198  IP: 192.*.*.*

Delphi6 Proffesional on WindowsXP  SP3です。
メールソフトを作っています。
Delphi付属のNMPOP3コンポーネントの例外処理がうまくいきません。
例えば、メールアドレスが違っていた場合、AuthenticationFailedで
Handledをtrueに設定していても、NMPOP3のTimeOutプロパティに設定した
時間経過後にAuthentication failedの例外が発生してしまいます。
また、サーバ名が違っていた場合はいきなリHost Loookuo errorになり
タイムアウト後にHost Lookup Timeoutと2回例外が発生します。
これらを処理するにはどうしたらいいでしょうか?

編集 削除
う〜ん  2009-04-27 09:43:33  No: 34199  IP: 192.*.*.*

どういう動作が希望なの?

編集 削除
RYO  2009-04-27 22:32:44  No: 34200  IP: 192.*.*.*

> どういう動作が希望なの?

ケース1:サーバ名が無効な時
ケース2:メールアドレス・パスワードが無効な時
実行時エラーを出さずに、MessageDlgで通知するようにしたいのです。

編集 削除
う〜ん  2009-04-28 18:19:12  No: 34201  IP: 192.*.*.*

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;

編集 削除
RYO  2009-05-02 23:22:56  No: 34202  IP: 192.*.*.*

ご指摘のように、何か失敗するとアプリケーションが終了できなくなるのも困っていた点です。
  教えていただいたコードを試してみます。ありがとうございました。

編集 削除
RYO  2009-05-15 20:39:25  No: 34203  IP: 192.*.*.*

ご指摘いただいた方法でうまくいきそうです。ありがとうございました。昔のTurboPASCALのように$-IでIOResultでできるかと思っていました。
  とりあえず解決とします。

編集 削除
RYO  2009-05-15 20:40:32  No: 34204  IP: 192.*.*.*

解決チェックを忘れました。

編集 削除