POCOで簡単POPアクセス

以前にC++用のライブラリPOCOを使ったWebのアクセスプログラムを紹介しましたが...
POCOで簡単Webアクセス - なぜか数学者にはワイン好きが多い

今回は,POP3でメールを受信するサンプルを書いてみました.

#include <iostream> // 画面表示に使う
#include <Poco/Net/POP3ClientSession.h>
using namespace std;
using Poco::Net::POP3ClientSession;

int main()
{
  string pophost = "mail.example.com" ;   // POPサーバの名前を入れて下さい
  string user = "admin";  // メールアカウントを指定して下さい
  string pass = "123456"; // メールアカウントに対するPOPパスワードを指定して下さい
  int max_ret = 3, j=1;  // カウンタ.max_retには,取得したいメールの数を指定して下さい

  POP3ClientSession client(pophost,110);  // POPサーバのポート110番に接続する

  client.login(user, pass); // アカウント名とパスワードを送信して,POPサーバにログインする

  POP3ClientSession::MessageInfoVec messagelist;  // メール情報を読み出す箱を準備

  client.listMessages(messagelist);  // メール情報を読み出す

  for(POP3ClientSession::MessageInfoVec::iterator i=messagelist.begin();i!=messagelist.end();++i) // 取得した全てのメールに対し繰り返す
  {
    client.retrieveMessage(i->id, cout); // メールのヘッダと本文を受信し,標準出力に出す.
    if(++j>max_ret) break;  // 取得したいメールの数だけ処理したら,ループを抜ける
  }
  return(0);
}

簡単ですね.
もし標準出力じゃなくて,ファイルに全メールを落としたい時なんかは,こんな感じで.

#include <iostream>
#include <fstream> // ファイルを扱うために...
#include <Poco/Net/POP3ClientSession.h>
using namespace std;
using Poco::Net::POP3ClientSession;

int main()
{
  string pophost = "mail.example.com" ;
  string user = "admin";
  string pass = "123456";

  POP3ClientSession client(pophost,110);

  client.login(user, pass);

  POP3ClientSession::MessageInfoVec messagelist;

  client.listMessages(messagelist);

  ofstream mails("mails.mbx"); // メールを保存するファイルを指定する

  for(POP3ClientSession::MessageInfoVec::iterator i=messagelist.begin();i!=messagelist.end();++i)
  {
    client.retrieveMessage(i->id, mails); // ファイルにメール一通を追加
    mails.put('\n'); // 見やすいように改行を入れてみました
  }
  return(0);
}

このプログラムを,「私は金をかけて何をやってるんやろ...」という呟きに対し,「まったくですよ!なにやってはるんですか!(笑)」とツッこんでくれた同僚に捧げますwww.


なお,POCOがスレッドセーフなのかどうかとかは,まだ調べていません.

次回は,WebのPOSTメソッドか,メールのSMTP通信のサンプルをお届けしようと思っています.