喫茶XRAYトップページ

[スレッド全体
]

[3285] NMPOP3 お知恵拝借返信 削除
2010/4/22 (木) 21:56:31 たてぐや 〔HomePage
 今、メールチェッカのようなアプリケーションを作っています。メールのチェックはNKPOP3を使っています。その中に
以下のようなコードがあります。

function TFrmSet.isKidoku(f, s, h , m , r: string): boolean;
{===============================================================================
既読ならtrueを返す。
===============================================================================}
var
  Fname : string;
  Mess : Mailmessages;
  LogF : File of Mailmessages;
  i : integer;
begin
  Result := false;
  Fname := ChangeFileExt(Application.exename,'.log');
  AssignFile(LogF,Fname);
  if FileExists(Fname) then begin  //(1)
    Reset(LogF);  //(2)
    for i :=0 to FileSize(LogF) - 1 do begin
      Read(LogF,Mess);
      if (Mess.From = f) and (Mess.Subject = s) and (Mess.Head = h)
        and (Mess.MesID = M) and (Mess.RcvHead = r) then begin
        Result := true;
      end;
    end;
    CloseFile(LogF);
  end;
end;

 なんということもないコードです。これは、タイマーイベントで呼び出される
プロシジャから呼び出されている関数です。初回のタイマーイベントでは、何の
問題もなく値を返すのですが、二度目以降タイマーイベントで呼ばれると、どう
いうわけか(1)でファイルがあります、と評価されるのですが、次の(2)に進むと
EINOUTErrorファイルが見つかりません」となってしまいます。起きる状況はか
なり絞られています。当該メールに添付ファイルがある場合のみ発生します。
 ブレークポイントを設けて確認したり、(1)の行の次にShowmessageでファイル
名を表示させたりしていますが、正しいファイル名が返っています。もちろ
んファイルをオープンしたらクローズする、TStringlistでメモリを確保したら
使用後に開放することは確認しています。これでもう一週間も悩んでいるので
すが、何か思い当たることはないでしょうか?
 どうかヒントになりそうなことがありましたら教えてください。



[3287] Re:NMPOP3 お知恵拝借返信 削除
2010/4/22 (木) 23:38:48 Mr.XRAY
▼ たてぐやさん

>   AssignFile(LogF,Fname);
>   if FileExists(Fname) then begin  //(1)
>     CloseFile(LogF);
>   end;
> end;


う〜ん.AssignFileって,たとえファイル操作しなくても,
CloseFileしないといけないんじゃなかったっけ?

  AssignFile();
  try
    処理
  finally
    CloseFlle();
  end;

な感じで... と思うのですが.未確認です.


[3288] Re2:NMPOP3 お知恵拝借返信 削除
2010/4/23 (金) 10:50:15 Mr.XRAY
> な感じで... と思うのですが.未確認です.

全く関係ないようです.
Assignできなかったのだから,Closeは必要ないですね.


[3290] Re3:NMPOP3 お知恵拝借返信 削除
2010/4/23 (金) 21:54:28 たてぐや 〔HomePage
▼ Mr.XRAYさん

> 全く関係ないようです.
> Assignできなかったのだから,Closeは必要ないですね.


 そうです。ここはTRY〜FINALYする必要はないのです。
 不可思議なのは、(1)の行でファイルの存在を確認してから(2)でオープしようと
しているのに「ファイルが見つからない」となることなのです。どう考えても
失敗する理由に思い当たりません。しかも添付ファイルがあって、そのデコードが
行われた時だけ発生するのですから、これはなにかNMPOP3のデコードの処理で
おかしなことが起きているのでは、と推測しています。
 しかし、ここがうまく動いてくれないことには先に進めないので困っています。

[3291] Re4:NMPOP3 お知恵拝借返信 削除
2010/4/23 (金) 23:48:25 Mr.XRAY
▼ たてぐやさん

> 行われた時だけ発生するのですから、これはなにかNMPOP3のデコードの処理で
> おかしなことが起きているのでは、と推測しています。


何なんでしょうね.
当方もplButtonの修正で現在悩んでおります.
チラツキなんですが,DoubleBufferをTrueにすると,OKなのですが,
Delphi2007だと,Paint処理に問題が.そこで,

procedure TplButton.WMEraseBkGnd(var Msg: TMessage);
begin
  Msg.Result:=0;
end;

とWM_ERASEBKGNDメッセージの処理に変更したのですが,
今度は画像にTIconを指定した時の描画に問題が....
なぜかIconのサイズを正常に取得してくれません.何故?
まっ,他のコードが影響しているのだとは思うのですが...
ハハハッ,笑って誤魔化すしかありません.


[3293] Re5:NMPOP3 お知恵拝借返信 削除
2010/4/24 (土) 23:57:41 たてぐや 〔HomePage
▼ Mr.XRAYさん

 お疲れ様です。plButtonは私も愛用させていただいています。

> ハハハッ,笑って誤魔化すしかありません.

 それが… 仕事場で使っているもので、製作当初は問題なく動いている
ように見えたのです。メール数が少なくて、現在悩んでいる状況が発生す
る環境ではなかったのだと思われます。
 んー、困った…。NMPO3からINDYPOPに作り変えてみようかと思っています。

[3295] Re6:NMPOP3 お知恵拝借返信 削除
2010/4/25 (日) 11:41:24 Mr.XRAY
▼ たてぐやさん

>  んー、困った…。NMPO3からINDYPOPに作り変えてみようかと思っています。

そうですね.
この際,思い切ってIndyどうですか?


[3298] Re7:NMPOP3 お知恵拝借返信 削除
2010/4/25 (日) 18:48:36 たてぐや 〔HomePage
▼ Mr.XRAYさん

> この際,思い切ってIndyどうですか?

 どう考えてもNMPOP3のデコード処理が何か悪さをしているんではないかと、
それしか今は原因が思い当たりません。
 INDY関係のコンポーネントは一度も使ったことがないので、心配ですが、
そうも言ってられないし… しかし、あのコードでエラーになる原因は
知りたいものです。

[3301] Re8:NMPOP3 お知恵拝借返信 削除
2010/4/25 (日) 23:41:39 Mr.XRAY
▼ たてぐやさん

> そうも言ってられないし… しかし、あのコードでエラーになる原因は
> 知りたいものです。


文字コードかな?


[3311] Re9:NMPOP3 お知恵拝借返信 削除
2010/4/26 (月) 18:33:19 たてぐや 〔HomePage
▼ Mr.XRAYさん
> 文字コードかな?
> 添付ファイルがある場合ということで.
> もしそれが日本語のファイル名だったら... もしかして


 ありがとうございます。
 添付ファイルは日本語ファイル名ではありません。
Fname := ChangeFileExt(Application.exename,'.log');
 ですので、Appication.logとなります。これをブレークをかけたりして
調べても正しいフルパス名が取れています。
何よりも不思議なのは、1回目はなんら問題なくデコードしてくれるのに、
そのメールをサーバから削除しないまま再度受信したときに限って
エラーになるのです。多分どこか他の所でなにかへぼなコードを
書いてあるのでは、と思います。もう少し調べてみます。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82