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