掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイル化したメールを表示するには? (ID:1886)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
前準備(サーバのメッセージと、保存済みメッセージのUIDLを比較して、保存していないUIDLの一覧を得る)は、 // メールの件数が0件以上の場合 if No >= 0 then begin の後ですね。 savedUidl := TStringList.Create; nowUidl := TStringList.Create; NMailPop3GetUidl(S, NMAIL_GET_UIDL_ALL, strUIDL, Length(strUIDL)); try savedUidl.LoadFromFile('uidl.lst'); except ; end; nowUidl.Text := StrPas(strUIDL); UidlDelete(nowUidl, savedUidl); というようにします。 UidlDeleteは、別途用意したもので、次のようなプロシージャです。 # 内部で、noとuidlをばらすUidlSplitプロシージャ(これも準備)を呼び出しています。 // 123 AAAAAを、no=123, Uidl=AAAAAに切り分ける procedure UidlSplit(Line: string; var no, Uidl: string); var p: integer; begin p := Pos(' ', Line); if p = 0 then begin // 半角スペースがない no := ''; Uidl := Line; end else begin no := Trim(Copy(Line, 1, p)); Uidl := Trim(Copy(Line, p, Length(Line))); end; end; procedure UidlDelete(nowUidl, savedUidl: TStringList); var i, j: integer; no1, Uidl1: string; no2, Uidl2: string; begin for i := nowUidl.Count - 1 downto 0 do begin UidlSplit(nowUidl[i], no1, Uidl1); for j := 0 to savedUidl.Count - 1 do begin UidlSplit(savedUidl[j], no2, Uidl2); if Uidl1 = Uidl2 then begin nowUidl.Delete(i); break; end; end; end; end; UidlSplitは、メールを取得するときにも使います。 保存していなくて、かつ、サーバに存在するメッセージのUIDLと、現在読み込もうとしているメッセージのUIDLを比較するためです。 ループに for Count := 1 to No do としていますが、これを、 for Count := 1 to nowUidl.Count - 1 do に変更し、 その中で、 UidlSplit(nowUidl[Count], no, uidl); と、noとuidlに分解。 そのループ内で、countを渡していたところに、StrToInt(no)を渡します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.