PHPで、GMail からメールを読み出す
libgmailer を使えば、結構簡単にできた。
$name="gmail-id"; $pwd="gmail-password"; $tz=-9;// timezone require_once('libgmailer.php'); $gm = new GMailer(); $gm->setLoginInfo($name, $pwd, $tz); if ($gm->connect()) { $gm->fetchBox(GM_STANDARD, 'inbox', 0); $snapshot = $gm->getSnapshot(GM_STANDARD); foreach( $snapshot->box as $conversation ){ if( $conversation['is_read'] ){ // 未読のみ中身を取得 $gm->fetchBox(GM_CONVERSATION, $conversation['id'], 0); $conv = $gm->getSnapshot(GM_CONVERSATION); $c = $conv->conv[0];//よく分からないけど決め打ち print("FROM: {$c['sender']}({$c['sender_email']})\n"); print("SUBJ: {$c['subj']}\n"); print("DATE: {$c['dt_easy']}\n"); print("{$c['body']}\n"); $gm->performAction(GM_ACT_UNREAD, $conversation['id'],null);// 未読に戻す print("<!-- ");var_dump($conv);print(" -->"); } print("<!-- ");var_dump($conversation);print(" -->"); print("<hr>"); } }
とりあえずこんな感じ。あ、もちろんUTF-8で。 cron で新着新着情報を得たい場合は $conversation["id"] あたりをキーにすればいいのかな?ラベルをいじるって手もあるな。携帯に通知だけしたいなら、 fetchBox(GM_CONVERSATION,...) 以下はいらなくって、$conversation にだいたいの情報(差出人、送信時刻、文頭の文字列なんか)が入ってる。$conversation['labels'] でラベルの情報が入っているし indicator も得られるので、特定のラベルのもの、そうでないもの、とかを分別して取得する事が可能なんでかなり便利かも。SPAMフィルターでも分類済みだし(SPAM分類されたものは inbox には入ってこない)。$c['body'] はHTML化されたタグ付き文章なんで、それをテキストに戻すのがちょっと面倒かな?
ということで後は任せたぜ PHPer(Peace and Happiness through Prosperity じゃないほう)のみんな!