掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
受信したデータをファイル化するには? (ID:1836)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
今試していたのですがやっぱりDataNameの作成のところで不正な処理を 起こしてしまうようです。一応現在のプロシージャのリストを載せます。 原因なのかな?と疑っているのはDateの値が参照できない値ですと 出ることなのですが、どうでしょうか? 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; // ファイルストリーム 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); 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); I := MailListView.Items.Add; I.Caption := StrPas(Subject); I.SubItems.Add(StrPas(Date)); I.SubItems.Add(StrPas(From)); I.Data := Header; StrLCat(Header, #13#10, HEADER_MAX - 1);} DataName := 'NML' + Copy(date, 1, 4) // yyyy + Copy(date, 6, 2) // mm + Copy(date, 9, 2) // dd + Copy(date, 12, 2) // hh + Copy(date, 15, 2) // mm + Copy(Date, 18, 2); // ss Seq := 0; while FileExists(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(DataName + '_' + IntToStr(Seq) + '.nml', fmCreate); Fs.WriteBuffer(Header^, StrLen(Header)); Fs.WriteBuffer(Header^, StrLen(Body)); finally I := MailListView.Items.Add; I.Caption := StrPas(Subject); I.SubItems.Add(StrPas(Date)); I.SubItems.Add(StrPas(From)); if Fs <> nil then Fs.Free; if Body <> nil then FreeMem(Body); end; end; 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.