以前に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通信のサンプルをお届けしようと思っています.