2008.03.18 Tuesday
メールチェックなどで、エラーメッセージ回避
DelphiのIndyコンポーネントを使いながら、例えば、定期的なチェックを行わなければならない、メールチェック(受信ボックスに何通入っているかだけ把握するたぐい)などをする際、通信障害など起こった時、いちいち、エラーメッセージが出ていてはうざったい。
2点でエラーが出ることがわかった。
(1)スリープから復帰する時に、「例外 Connection Closed Gracefully」が出る。
(2)通信断の時に出る、Socketエラー
まず、(1)は、下のURLに情報があった。
・エラーはないはずなのに 例外 Connection Closed Gracefully が出る
デバッカオプション で言語固有の例外より情報を追加するだけだ。追加してその項目にチェックをはずすと、出なくなった。
try except on E : Exception do でも回避できそうな気がするが、楽なので、こちらを採用。
次に(2)は、下記の様に記述した。
uses IdStack を追加する。
var
FMsgCount:Integer;
begin
try
try
if IdPOP31.Connected then IdPOP31.Disconnect;
IdPOP31.Connect;
FMsgCount := IdPOP31.CheckMessages;
Label_MailChk.Caption := '最新メール= '+Inttostr(FMsgCount)+' 件';
except
on E:EIdSocketError do
//エラーが起こった時の処理
//if E.LastError=10060 then //HTTPのソケットエラー
if E.LastError=11004 then //POP3のソケットエラー
end;
finally
//絶対行いたいコードを書く
end;
2点でエラーが出ることがわかった。
(1)スリープから復帰する時に、「例外 Connection Closed Gracefully」が出る。
(2)通信断の時に出る、Socketエラー
まず、(1)は、下のURLに情報があった。
・エラーはないはずなのに 例外 Connection Closed Gracefully が出る
デバッカオプション で言語固有の例外より情報を追加するだけだ。追加してその項目にチェックをはずすと、出なくなった。
try except on E : Exception do でも回避できそうな気がするが、楽なので、こちらを採用。
次に(2)は、下記の様に記述した。
uses IdStack を追加する。
var
FMsgCount:Integer;
begin
try
try
if IdPOP31.Connected then IdPOP31.Disconnect;
IdPOP31.Connect;
FMsgCount := IdPOP31.CheckMessages;
Label_MailChk.Caption := '最新メール= '+Inttostr(FMsgCount)+' 件';
except
on E:EIdSocketError do
//エラーが起こった時の処理
//if E.LastError=10060 then //HTTPのソケットエラー
if E.LastError=11004 then //POP3のソケットエラー
end;
finally
//絶対行いたいコードを書く
end;