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 じゃないほう)のみんな!