Top / Programming / C++Builder / C++Builder2007とIndy10でメールを受信する

C++Builder2007とIndy10でメールを受信する

C++ Builder 2007とIndy 10を使ってメールを受信する方法です。

メールサーバーに接続する

IdPOP31->Host = "example.jp";
IdPOP31->Username = "xxxxxx";
IdPOP31->Password = "xxxxxx";
try
{
  IdPOP31->Connect(); //メールサーバーに接続する
  //何らかの処理
}
__finally
{
  IdPOP31->Disconnect(); //切断する
}

メールボックスのメールの数を取得する

メールボックスのメールの数を取得するにはTIdPOP3のCheckMessages()を使用します。

//総メッセージ数を取得する
int msgCount = IdPOP31->CheckMessages();
MessageDlg(AnsiString().sprintf("総メッセージ数は「%d」件です", msgCount), mtInformation, TMsgDlgButtons() << mbOK, 0);

メールを受信する

メールを受信するにはTIdPOP3のRetrieve()を使用します。

Retrieve()メソッドの最初の引数は受信するメールの番号です。
メールの内容は2番目の引数であるTIdMessage*のインスタンスに設定されます。
受信に成功したときは、Retrieve()メソッドはtrueを返します。

//メールを受信する
TIdMessage* msg = new TIdMessage(NULL);
bool result = IdPOP31->Retrieve(1, msg); //メールの番号は1から
if (result)
{
  MessageDlg(msg->Body->Text, mtInformation, TMsgDlgButtons() << mbOK, 0);
}
else
{
  MessageDlg("メールの受信に失敗しました。", mtError, TMsgDlgButtons() << mbOK, 0);
}

UIDLを取得する

メールを重複しないで受信するために、UIDLを使用します。

UIDLを取得するにはTIdPOP3のUIDL()を使用します。

UIDL()メソッドの最初の引数は取得したUIDLを格納するTIdStrings*(TStrings*)を指定します。
2番目の引数には取得するメールの番号を指定します。
指定しない場合はすべてのメールのUIDLを取得します。
取得に成功したときはUIDL()メソッドはtrueを返します。

//すべてのメールのUIDLを取得する
TStringList* dest = new TStringList();
bool result = IdPOP31->UIDL(dest);
if (result)
{
  ShowMessage(dest->Text);
}
else
{
  MessageDlg("UIDLの取得に失敗しました。", mtError, TMsgDlgButtons() << mbOK, 0);
}

//指定した番号のメールのUIDLを取得する
TStringList* dest = new TStringList();
bool result = IdPOP31->UIDL(dest, 1); //メール番号は1から
if (result)
{
  ShowMessage(dest->Text);
}
else
{
  MessageDlg("UIDLの取得に失敗しました。", mtError, TMsgDlgButtons() << mbOK, 0);
}

関連