はじめまして。
メール受信機能をNMPOP3コンポーネントを使って行っているのですが、
ヘルプを見ながら考えていましたが、どうしても先に進めなくなってしまい、
こちらの掲示板に書き込みさせていただきました。
MailCountで取得待ちのメッセージ数を取ることはできたのですが、
そのメールをすべて一度に取得し表示するようなことはできないのでしょうか?
ループを使って・・・なども考えたのですが・・・。
ヘルプでは、取得したい番号を入力しその番号のメッセージのみが表示されるところまでしかわかりませんでした。
まだDelphiをきちんと理解できていない状態で知識不足ですが、
どなたかご存知の方がいらっしゃいましたらアドバイスをよろしくお願いします。
1つずつ順番に取得すればよろしいかと。
おっしゃるとおり、ループで処理します。
NMPOP3のメソッドがどういうものがあるかはわかりませんが、次のような手順になります。
USER ユーザIDの指定
PASS パスワードの指定(ログイン)
STAT メール件数の取得
(必要であれば)
UIDL UIDLの取得
TOP n 0 n件目のヘッダを取得
(メールを取得するため、以下をSTATで帰ってきた値分繰り返す)
RETR n メールの取得
QUIT ログアウト
POP3にはこの程度しか規定されていません。
詳しくは、RFC(1939など)を参照してください。
# RFCに関しては、googleなどで検索すれば見つかります
返答ありがとうございました。
返信が遅くなってすみません。
それぞれの意味することはわかるのですが、やはりそれをうまくコードにすることができません・・・。
受信機能を加えたことが原因かわからないのですが、exeが作成できない致命的エラーも出てきてしまって・・・。
知識不足なのはわかっていますが、どうしてもわかりません。
受信におけるコード例を挙げていただければ光栄です・・・。
ご面倒おかけして申し訳ありません。
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クライアントを書く前に、一般的な構文を勉強した方がいいですよ。
小難しいものはその後です。
ツイート | ![]() |