喫茶XRAYトップページ

[▲前のスレッド]

[3317] ちょっと鬱状態返信 削除
2010/5/1 (土) 22:22:09 たてぐや 〔HomePage
 こんな難しい漢字は手じゃ絶対書けませんね。
 で、「お知恵拝借」のスレッドが長くなってしまったので、ここに改めます。
どなたか何か気付いたことがあったら教えてください。前スレと一部重複しま
すがご勘弁を。
 エラーが出るのは以下のコードです。

  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;

(1)の所でファイルがあることを確認してから(2)でオープンしているのですが、
エラーになるケースがあります。ここまでは前スレに書きました。そして、原
因不明なので、蚤取り眼で追いかけたところ、解ったことがあります。この関
数を呼び出す前にこんなコードがあります。

        NMPOP31.GetMailMessage(i);
        Mess.From         := NMPOP31.MailMessage.From;
        Mess.Subject      := PzConv1.MIMEHeaderDecode(NMPOP31.MailMessage.Subject);
        Mess.Printed      := '0';
        Mess.Head         := DecodeDateTime(NMPOP31.Mailmessage.Head);
        Mess.Atached      := NMPOP31.MailMessage.Attachments.CommaText;

 NMPO3のAtachementはTstringlist型ですので、Commmatetxで文字列に代入し
ています。Atachedはstring[255]で定義しています。この時に、Atachmentsに
一つだけ入ってくる分には何も起りません。とkろが、2個以上入ってくると
上記(2)でエラーになります。昔ながらの方法で

{$I-}
  Reset(LogF);
  SHowmessage(IntToStr(IORsult));
{$I-}
としてみると、エラーコードとして「2」が返ってきます。どうもAtachementsが
複数の値を持っていると、何かメモリエリアが破壊されているような感じを
受けます。似たようなコードは他のプログラムで何度か書いていますが、こんな
不可解な現象は初めてです。
 もうずいぶん長い間これが解決でできず、表題のような状態になりました。
どなたか何かお気づきの点がありましたらどうか教えてください。


[3318] Re:ちょっと鬱状態返信 削除
2010/5/1 (土) 23:20:41 Mr.XRAY
▼ たてぐやさん

>  こんな難しい漢字は手じゃ絶対書けませんね。

御意!

>  もうずいぶん長い間これが解決でできず、表題のような状態になりました。
> どなたか何かお気づきの点がありましたらどうか教えてください。


本当にお疲れ様です.
NMPOP3はDelphi6にはありますね.
う〜む.どなたか... 頼みます.


[3319] Re2:ちょっと鬱状態返信 削除
2010/5/1 (土) 23:38:12 Mr.XRAY
今Delpphi6 Proを起動してTNMPOP3コンポを配置して,コードをみてみようと
思ったら,これ,ソースコードは付いていないんですね...

戦意喪失.


[3320] Re:ちょっと鬱状態返信 削除
2010/5/3 (月) 00:02:56 ヒマジン(John Lemmon)
▼ たてぐやさん
>  エラーが出るのは以下のコードです。
>
>   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;
>
> (1)の所でファイルがあることを確認してから(2)でオープンしているのですが、
> エラーになるケースがあります。


ヒマだったので、D4で試してみましたが、複数の添付ファイルがある場合でも
そのようなエラーは発生しません。
タイマーではなく、ボタンのクリックでその関数を呼んだ場合でもエラーが
確実に発生するような最小限のコードと条件を提示してください。


> …この関数を呼び出す前にこんなコードがあります。
>
>      NMPOP31.GetMailMessage(i);
>      Mess.From         := NMPOP31.MailMessage.From;
>      Mess.Subject      := PzConv1.MIMEHeaderDecode(NMPOP31.MailMessage.Subject);
>      Mess.Printed      := '0';
>      Mess.Head         := DecodeDateTime(NMPOP31.Mailmessage.Head);
>      Mess.Atached      := NMPOP31.MailMessage.Attachments.CommaText;
>


また、既読判定の関数を呼ぶ前に GetMailMessage(i);の代わりに GetSummary(i);を使ってみたらどうなりますか?
そうした場合でもエラーが出ますか?


[3321] Re2:ちょっと鬱状態返信 削除
2010/5/3 (月) 22:03:48 たてぐや 〔HomePage
▼ ヒマジン(John Lemmon)さん

 アドバイスいただいたのにお返事が遅くなってしまって済みません。

> タイマーではなく、ボタンのクリックでその関数を呼んだ場合でもエラーが
> 確実に発生するような最小限のコードと条件を提示してください。


 このアプリケーションはタスクトレイに入るタイプでフォームは
表示されません。しかしながらタスクトレイのポップアップ、メニ
ューに「今すぐチェック」という項目が設けてあって、タイマーみ
関わらず受信を行うことができるようにしてあります。ここで呼び
出されるのはタイマーイベントで呼び出されるのと同じプロシジャ
です。

> また、既読判定の関数を呼ぶ前に GetMailMessage(i);の代わりに GetSummary(i);を使ってみたらどうなりますか?
> そうした場合でもエラーが出ますか?


 試してみたところ、GetSummary(i)ではエラーになりません。も
ちろん情報をとっていないので、既読/未読の判断はできません。
GetMailmesageで、デコードが開始されるとこのエラーが発生する
ように思います。(思いこんじゃいけないとは思いますが…)

[3322] Re3:ちょっと鬱状態返信 削除
2010/5/3 (月) 23:40:28 ヒマジン(John Lemmon)
▼ たてぐやさん
>  試してみたところ、GetSummary(i)ではエラーになりません。も
> ちろん情報をとっていないので、既読/未読の判断はできません。
> GetMailmesageで、デコードが開始されるとこのエラーが発生する
> ように思います。(思いこんじゃいけないとは思いますが…)


既読/未読の判断関数で添付ファイルは引数に含まれていないので、
その判断には GetSummary(i)で十分だと思いますけど?
なんのために添付ファイルまで取得してるんですか?
ところで、AttachFilePathは設定してあるんでしょうか?


[3323] Re4:ちょっと鬱状態返信 削除
2010/5/4 (火) 00:06:45 たてぐや 〔HomePage
▼ ヒマジン(John Lemmon)さん
> 既読/未読の判断関数で添付ファイルは引数に含まれていないので、
> その判断には GetSummary(i)で十分だと思いますけど?
> なんのために添付ファイルまで取得してるんですか?


 受信記録としてメールソフトの受信画面のようなものを表示します。
その時にSummary情報と一緒に添付ファイル名が欲しいのです。既読判断では
それ以外の情報で十分に判別できるためです。

> ところで、AttachFilePathは設定してあるんでしょうか?

 こちらはもちろん設定しています。設定ダイアログを持っていて、
そこで設定したものが渡るようになっています。

[3324] Re5:ちょっと鬱状態返信 削除
2010/5/4 (火) 13:17:13 ヒマジン(John Lemmon)
▼ たてぐやさん

GetMailMessageを使ってメールの既読/未読の判定をした時に無駄に取得した
添付ファイルは どのタイミングで削除しているのでしょうか?
やり方を変えて、GetSummaryを使ってメールの既読/未読の判定をした後で、
未読のメールだけを再度GetMailMessageを使って取得するのではダメなんですか?
そのようにしても何かエラーが発生しますか?
こちらではエラーを再現できないのですが、原因がNMPOP3ではなくて環境による
ものということはないのでしょうか?


[3325] Re6:ちょっと鬱状態返信 削除
2010/5/4 (火) 17:08:05 たてぐや 〔HomePage
▼ ヒマジン(John Lemmon)さん
 アドバイスありがとうございます。

> GetMailMessageを使ってメールの既読/未読の判定をした時に無駄に取得した
> 添付ファイルは どのタイミングで削除しているのでしょうか?


ここは
if not isKIdoku then begin
処理
end
else begin
  添付ファイル削除
end;
のようにしてあります。

> やり方を変えて、GetSummaryを使ってメールの既読/未読の判定をした後で、
> 未読のメールだけを再度GetMailMessageを使って取得するのではダメなんですか?


 こちらはこれから書き変えて試してみます。休日は「おんもが明るいうち」は
プログラム作りに身が入らなうもので、済みません。

> こちらではエラーを再現できないのですが、原因がNMPOP3ではなくて環境による
> ものということはないのでしょうか?


 職場のマシンと自宅のマシンでまったく同じエラーが発生しますので、
環境ではないと思われます。

[3327] Re6:ちょっと鬱状態返信 削除
2010/5/4 (火) 23:29:36 たてぐや 〔HomePage
▼ ヒマジン(John Lemmon)さん

> GetMailMessageを使ってメールの既読/未読の判定をした時に無駄に取得した
> 添付ファイルは どのタイミングで削除しているのでしょうか?
> やり方を変えて、GetSummaryを使ってメールの既読/未読の判定をした後で、
> 未読のメールだけを再度GetMailMessageを使って取得するのではダメなんですか?


 その手順でやるとエラーは出ず、うまくいきそうです。この変更に伴って
いくつか組み立てなおさないといけないところは残りましたが。このエラーが
おかげさまでクリアできましたので、じっくり取り組めます。

ありがとうございます。

[3326] Re:ちょっと鬱状態返信 削除
2010/5/4 (火) 18:20:03 Mr.XRAY
がんばってください!! お役に立ちませんで...
影ながら応援しています。


[3328] Re2:ちょっと鬱状態返信 削除
2010/5/4 (火) 23:30:40 たてぐや 〔HomePage
▼ Mr.XRAYさん

> がんばってください!! お役に立ちませんで...
> 影ながら応援しています。


 ありがとうございます。どうやら見通しが立ってきました。

 このアプリケーションもそうなんですが、サーバのメンテナンスもしなくては
いけないので、明日はこちらをやる予定です。今使っているOSはFedora12なんで
すが、半年ごとのバージョンアップは1年過ぎるとサポートがなくなってしまう、
という流れがつらくなってきて、同じRHEL系LINUXのCentOSに入れ替えようとし
ています。
 まったくパソコン通信のシスオペとか自宅サーバ持ちとか、苦労ばっかり
で… パソコン通信をやめた時に二度とシスオペなんかやるものか、と思った
のに。

[3329] Re3:ちょっと鬱状態返信 削除
2010/5/5 (水) 00:52:33 Mr.XRAY
▼ たてぐやさん

>  ありがとうございます。どうやら見通しが立ってきました。

私もちょっとやってみようかとも思ったのですが,
なんせNMPOP3というのが...  ゴメンナサイ.

このあたりになると,Delphiのコミュニティでのやり取りでの
範疇を超えていますからね.
John Lemmon(Lennonさんじゃないのね ^^;)とかのレスなど,
何かをつかむきっかけみたいのが必要となってくるんじゃないかと
思いますね.


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