取得待ちメールを一度に受信するには?


ハイジ  2003-12-07 04:08:36  No: 5956

はじめまして。
メール受信機能をNMPOP3コンポーネントを使って行っているのですが、
ヘルプを見ながら考えていましたが、どうしても先に進めなくなってしまい、
こちらの掲示板に書き込みさせていただきました。

MailCountで取得待ちのメッセージ数を取ることはできたのですが、
そのメールをすべて一度に取得し表示するようなことはできないのでしょうか?
ループを使って・・・なども考えたのですが・・・。
ヘルプでは、取得したい番号を入力しその番号のメッセージのみが表示されるところまでしかわかりませんでした。
まだDelphiをきちんと理解できていない状態で知識不足ですが、
どなたかご存知の方がいらっしゃいましたらアドバイスをよろしくお願いします。


にしの  2003-12-07 04:28:07  No: 5957

1つずつ順番に取得すればよろしいかと。
おっしゃるとおり、ループで処理します。

NMPOP3のメソッドがどういうものがあるかはわかりませんが、次のような手順になります。

USER  ユーザIDの指定
PASS  パスワードの指定(ログイン)
STAT  メール件数の取得

(必要であれば)
UIDL  UIDLの取得
TOP n 0 n件目のヘッダを取得

(メールを取得するため、以下をSTATで帰ってきた値分繰り返す)
RETR n メールの取得

QUIT  ログアウト

POP3にはこの程度しか規定されていません。
詳しくは、RFC(1939など)を参照してください。
# RFCに関しては、googleなどで検索すれば見つかります


ハイジ  2003-12-07 18:59:49  No: 5958

返答ありがとうございました。
返信が遅くなってすみません。

それぞれの意味することはわかるのですが、やはりそれをうまくコードにすることができません・・・。
受信機能を加えたことが原因かわからないのですが、exeが作成できない致命的エラーも出てきてしまって・・・。

知識不足なのはわかっていますが、どうしてもわかりません。
受信におけるコード例を挙げていただければ光栄です・・・。

ご面倒おかけして申し訳ありません。


にしの  2003-12-08 18:20:54  No: 5959

Delphi7にMNPOP3が無いためコーディング例を提示できませんが、以下のような形になります。

自前POP3クライアントでの処理です。メソッド名は参考になりません。流れだけ参考にしてください。使用しているメソッド名は、ログイン・接続・切断以外は、RFCで規定されているPOP3の命令そのままです。
# Stat, Retr, Quit

var
  i, Count, Octet: Integer;
  Stream: TMemoryStream;
begin
  OvPOP3.Hostname := HostnameEdit.Text;//POP3サーバ名
  OvPOP3.Username := UsernameEdit.Text;//ユーザID
  OvPOP3.Password := PasswordEdit.Text;//パスワード
  OvPOP3.Port := 110;//ポート番号
  OvPOP3.DebugMode:=True;//デバッグモード
  OvPOP3.APOP := APOPCheck.Checked;//APOPであればTrue
  Stream := TMemoryStream.Create;
  try
    OvPOP3.Connect;//サーバに接続
    OvPOP3.Login;//ログイン
    Count := 0;
    Octet := 0;
    OvPOP3.Stat(Count, Octet);//メールの数とオクテット数取得

    for i := 1 to Count do//1通目からCount通目までループ
    begin
      Stream.Seek(0, soBeginning);
      OvPOP3.Retr(i, Stream);//i番目の内容をStreamに格納
      Stream.Seek(0, soBeginning);
      //Streamにはi番目のメール内容が入っている
      // ここでStreamにたいして何かの処理
    end;
    OvPOP3.Quit;//ログアウト
    OvPOP3.Disconnect;//切断
  finally
    Stream.Free;
  end;

致命的なエラーは、番号だけのやつでしょうか。
ヘルプにあるとおり、Borlandに連絡してください。
たいていは、一度閉じてから再度開いてリビルドすればよろしいかと思います。
何度も出る場合は、Borlandへ問い合わせてください。

知識不足でコーディングできない場合は、どのようなコーディングをして失敗したか書いた方がよろしいかと思います。
それ以前の問題でしたら、POP3クライアントを書く前に、一般的な構文を勉強した方がいいですよ。
小難しいものはその後です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加