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