高機能メール受信クライアントQdmailReceiver
1ヶ月ぶりくらいの更新。ここのところ本業で忙しかったから、新しい技術に触れる機会がなかった。
以前携帯から写メールを送信し、それをPOPして添付ファイルを取り出してアルバムを作成するような仕組みを作った。その際はPEARを試したり、Zendを試したりいろいろ試行錯誤しつつ、結局は自分でかなりのスクリプトを書かなくてはいけなかった(実際書いたのは数十行だけど、試行錯誤段階から考えれば1000行以上は書いたと思う)。
今回、とあるクライアントから同等(もしくはそれ以上)の機能を実現できないか打診を受けた。しかし上記の「なんちゃってスクリプト」では申し訳ないし、うまい方法がないかと考えていたら、大変すばらしいライブラリに出会えた。
QdmailReceiver Multibyte mail decoder & POP Client
作者の方はメール関連のライブラリをいくつか記述していらっしゃるが、どれも大変すばらしい(といっても2本試しただけなのだけれど)。上記のライブラリを使うとメールをPOPしてあっという間にメール本文と添付ファイルに分割してくれる優れものだ。そしてHTMLメールにも対応しているので、文句のつけようがない。これで0.1.1アルファ版だというのだから作者の謙虚さにも恐れ入る。
実際のスクリプトは以下のように記述した。
require_once(‘qdmail_receiver.php’);
$server = array(
‘protocol’=>’pop3′,
‘host’=>’mail.example.com’,
‘user’=>’username’,
‘pass’=>’password’,
);
$receiver = QdmailReceiver::start(‘pop’, $server);
for($i = 1 ; $i <= $receiver->count() ; $i++){
$receiver->header(‘subject’);
var_dump($receiver->bodyAutoSelect());
$attachments = $receiver->attach();
foreach($attachments as $attachment){
var_dump($attachment);
}
$receiver->next();
}
11行目で本文を取り出しているのだが、なぜか10行目にあるようにヘッダに対して何らかの処理をしないと本文を取得できなかった。仕様だろうか。しかしまぁ、ヘッダは当然のように処理しなくてはいけないのでなんら問題はない。これでまた楽ができそうだ。