BorlandC++Builder/メールを受信する

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