掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイル化したメールを表示するには? (ID:1880)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
このような感じに記述するのでしょうか? UIDL.lstの読み込みに失敗(例外が発生)した時は何も入れない方が 良いのでしょうか? また比較はどの辺りで行えばよろしいのでしょうか? procedure TMainForm.AddMailList(S: TSocket); var No, Count: integer; Subject: array [0..HEADER_MAX] of Char; Date: array [0..HEADER_MAX] of Char; From: array [0..HEADER_MAX] of Char; Header: PChar; I: TListItem; DataName: String; // NMLファイルのファイル名 Seq: Integer; // シーケンス番号 Body: PChar; // Bodyのデータ用 BodySize: Integer; // Bodyのファイルサイズ Fs: TFileStream; // ファイルストリーム strDate: String; // 日付の取得 strUIDL: array [0..HEADER_MAX] of Char; // UIDLのリスト UIDLFs: TFileStream; // ファイルストリーム strMUIDL: array [0..HEADER_MAX] of Char; // メモリ用のリスト格納 UIDLMs: TMemoryStream; // メモリストリーム SavedUIDL: TStringList; // 保存したUIDLの格納 NowUIDL: TStringList; // メモリ側の新しいUIDLの格納 begin // メール本文表示をクリア BodyMemo.Lines.Clear; // ListView もクリア HeaderDataClear; MailListView.Items.Clear; // POP3 サーバに接続する S := NMailPop3Connect(PChar(Pop3Name)); if S <> INVALID_SOCKET then begin if (Id = '') or (Password = '') then begin // ID とパスワード入力 if InputForm.ShowModal = mrOk then begin Id := InputForm.IdEdit.Text; Password := InputForm.PasswordEdit.Text; end; end; // メールの数を得る No := NMailPop3Authenticate(S, PChar(Id), PChar(Password), ApopFlag); // 保存したUIDLをTStringListに格納する SavedUIDL := TStringList.Create; try // 保存したUIDL.lstをSavedUIDLに格納 SavedUIDL.LoadFromFile('uidl.lst'); except // ファイルが読み込めなかった場合はUIDL.lstを作成 UIDLFs := nil; try NMailPop3GetUidl(S, NMAIL_GET_UIDL_ALL, strUIDL, Length(strUIDL)); UIDLFs := TFileStream.Create('uidu.lst', fmCreate); UIDLFs.WriteBuffer(strUIDL[0], StrLen(strUIDL)); finally if UIDLFs <> nil then UIDLFs.Free; end; SavedUIDL.LoadFromFile('uidl.lst'); end; if No >= 0 then begin for Count := 1 to No do begin // 順番にヘッダの内容を読み、ListView に追加 GetMem(Header, HEADER_MAX); NMailPop3GetMailStatus(S, Count, Subject, Date, From, Header, False); strDate := StrPas(Date); DataName := 'NML' + Copy(strDate, 1, 4) // yyyy + Copy(strDate, 6, 2) // mm + Copy(strDate, 9, 2) // dd + Copy(strDate, 12, 2) // hh + Copy(strDate, 15, 2) // mm + Copy(strDate, 18, 2); // ss Seq := 0; while FileExists(RcvFolder + 'RcvMail\' + DataName + '_' + IntToStr(Seq) + '.nml') do Inc(Seq); try BodySize := NMailPop3GetMailSize(S, Count); GetMem(Body, BodySize); NMailPop3GetMail(S, Count, Subject, Date, From, Header, Body, nil, nil); Fs := TFileStream.Create(RcvFolder + 'RcvMail\' + DataName + '_' + IntToStr(Seq) + '.nml', fmCreate); Fs.WriteBuffer(Header^, StrLen(Header)); Fs.WriteBuffer(#13#10, StrLen(#13#10)); Fs.WriteBuffer(Body^, StrLen(Body)); finally I := MailListView.Items.Add; I.Caption := StrPas(Subject); I.SubItems.Add(StrPas(Date)); I.SubItems.Add(StrPas(From)); if DeleteFlag = False then NMailPop3DeleteMail(S, No); if Fs <> nil then Fs.Free; if Body <> nil then FreeMem(Body); end; end; TreeView1.Select(TreeView1.Items.Item[1]); TreeView1.SetFocus; end else begin // サーバーからのエラーメッセージを取得 NMailGetMessage(NMAIL_GET_ERROR_MESSAGE, Subject, HEADER_MAX); MessageDlg('ログインエラー:' + StrPas(Subject), mtError, [mbOK], 0); end; NMailPop3Close(S); S := INVALID_SOCKET; end; end; 全コード載せてしまってごめんなさいです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.