メールを受信

フォームにidPOP3を貼り付けます。名前はidPOP31(初期値)です。jconvert.pasを追加してください。

サーバなどの設定

オブジェクトインスペクタを見ればわかると思いますが、idPOP3には

がありますので設定します。プロバイダにもらったマニュアルに書いてあるやつです。

サーバに接続

接続します。idPOP3のConnectメソッドを使用します。引数にはタイムアウトを指定します。

サーバ上にあるメールの数を取得

サーバ上にあるメールの数を取得します。idPOP3のCheckMessages関数を使用します。 戻り値はInteger型です。

メールが来てれば受信

もし先ほど取得したメールの数が1以上であれば、メールを受信します。 idPOP3のRetrieveメソッドを使います。引数は(メール番号:integer,メッセージ:TidMessage)です。 一通目のメール番号は1です。

ソース(一部省略)

もともとVBをやっていたこともあって、動的配列を使う方法にしてしまいました・・

type
  TMsgArray:array of TidMessage;

var
  mailCount:integer;
  msgReceived:TMsgArray;
  
begin

  //設定
  idPOP31.Host := 'mail.aaaaaaa.ne.jp';
  idPOP31.Password := 'asfaffadf';
  idPOP31.Username := 'username';

  //接続
  idPOP31.Connect(-1);

  //サーバ上にあるメールの数を取得
  mailCount := idPOP31.CheckMessages;

  if mailcount > 0 then begin 
    //msgReceivedの要素数を再定義
    SetLength(msgReceived,mailCount);

    for i := 0 to mailCount do begin
      msgReceived[i] := TidMessage.Create(idPOP31);
      //受信
      idPOP31.Retrieve(i+1,msgReceived[i]);
    end;
  
    //1通目のメールを表示
    lblSubject.Caption := msgReceived[0].Subject;
    lblFrom.Caption := msgReceived[0].From.Name + ' <' + msgReceived[0].From.Address + '>' ;	
    memBody.Text := jConvert.ConvertJCode(msgReceived[0].Body.Text,SJIS_OUT);
  end;

  //切断
  idPOP31.Disconnect;
 
end;

戻る