IndyのTIdPOP3を使用すれば容易にメールの受信を実装することができます。ここから最新版をダウンロードできるようです。
目次
準備
TIdPOP3のHost・Username・Passwordなどのプロパティをメールサーバに合わせて設定します。設定値が固定であればRAD環境上で設定することも可能です。
メール受信サンプル
1: IdPOP3->Connect(-1);
2: int mailCount = IdPOP3a->CheckMessages();
3: for(int i=1; i<=mailCount; i++) {
4: TIdMessage *msg = new TIdMessage(this);
5:
6: if (IdPOP3->RetrieveHeader(i, msg)) { ... }
7:
8: // デーコード前のサブジェクトを s に取得
9: msg->Headers->Extract("Subject", s);
10:
11: // メール本文を受信
12: if (IdPOP3->Retrieve(i, msg)) {
13: text = ConvertJCode(msg->Body->Text, SJIS_OUT);
14: }
15: delete msg;
16: }
17: IdPOP3->Disconnect();
1行目でサーバへ接続しています。引数はタイムアウト時間でmsec単位で指定します。-1はタイムアウトしない設定です。
2行目でサーバ上のメール件数を取得します。
3〜16行でサーバ上のメールを総当りでチェックしています。4行目はメールを扱うためのコンテナクラスをインスタンス化しています。ヘッダやその他の情報を一括して扱います。ファイルへの読み書きなどのメソッドも持っています。
6行目のRetrieveHeader()ではヘッダのみ受信しています。題名や送信者などの情報のみで本文は受信しません。9行目は受信したヘッダからサブジェクトを抽出しています。TIdMessageではMIMEエンコード処理もある程度やりますが十分ではないので、特に必要な場合はエンコード前の文字列から独自にエンコードした方がいいでしょう。9行目はそのための処理です。
12行目のRetrieve()ではメールのヘッダと本文を受信しています。13行目で本文をエンコード処理しています。ConvertJCode()についてはこちらを見てください。
いずれにせよ、メールの送信と異なり、どんな文字コードやデータが送られてくるか分からないので、全てに対応するのは大変です。
2006-12-23 komina