Gmail API メール取得 方法(PHP)

スポンサードリンク

Gmail APIを使用してメッセージを取得するサンプル

メッセージ一覧取得

Gmail APIを使用したメッセージ一覧取得処理を関数化したもの

メッセージ一覧は一度に取得するのではなく、何回かに分割して取得し前回分にマージしていく。

その際の取得範囲を決定する情報がページトークン

function listMessages($service, $userId) {
  $pageToken = NULL; //ページトークン
  $messages = array(); //メッセージ
  $opt_param = array(); //オプションパラメータ
  do {
    try {
      if ($pageToken) {
        $opt_param['pageToken'] = $pageToken; //ページトークンをセット
      }
      //メッセージ一覧を取得
      $messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param);
      if ($messagesResponse->getMessages()) {
        //マージする
        $messages = array_merge($messages, $messagesResponse->getMessages());
        //ページトークン取得
        $pageToken = $messagesResponse->getNextPageToken();
      }
    } catch (Exception $e) {
      print 'An error occurred: ' . $e->getMessage();
    }
  } while ($pageToken);
  //メッセージを返却
  return $messages;
}

赤アンダーラインの箇所がメッセージ一覧を取得する肝のメソッド

メッセージ一覧は正確にはメッセージIDの一覧だと思ってください。

メッセージの具体的な内容の取得は次に説明するメッセージ取得でおこなう。

参考 listUsersMessagesメソッドの詳細についてはこちら

メッセージ取得

個々のメッセージを取得する場合の処理を関数化したもの

function getMessage($service, $userId, $messageId) {
  try {
    //メッセージ取得
    $message = $service->users_messages->get($userId, $messageId);
    //返却
    return $message;
  } catch (Exception $e) {
    print 'An error occurred: ' . $e->getMessage();
  }
}

赤アンダーラインの箇所がメッセージ取得の肝のメソッド

参考 getメソッドの詳細についてはこちら

メッセージ本文取得

function getMessageBody($message) {
  //bodyを取得
  $body = $message->getPayload()->getBody();
  $rawData = $body->data;
  $sanitizeData = strtr($rawData, '-_', '+/'); //サニタイジングを戻す
  $decodeMessage = base64_decode($sanitizeData); //base64デコード
  //返却
  return $decodeMessage;
}
メッセージ本文はbase64エンコードされているためデコードする

一連の処理サンプル

//サービスオブジェクト
$service = new Google_Service_Gmail($client);
//ユーザーID(当該ユーザーの場合は'me'を渡す)
$userId = 'me';
//メッセージ(ID)一覧
$messages = listMessages($service, $userId);
//ループ
foreach ($messages as $msg) {
  //メッセージID
  $messageId = $msg->getId();
  //メッセージ(オブジェクト)取得
  $message = getMessage($service, $userId, $messageId);
  //メッセージ本文取得
  $messageBody = getMessageBody($message);
  //出力
  echo $messageBody;
}

スポンサードリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする