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を取得するには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);
}