2017-08-07 3 views
1

Gmail APIを使用するスクリプトを作成して、ラベルID Label_41を持つすべてのメールからすべての添付ファイルをダウンロードしたいと考えています。特定のラベルを含むメールからすべての添付ファイルをダウンロード

私はラベルLabel_41ですべてのメールを返すようにlistUsersMessages(...)->getMessages()を期待APIを使用してhttps://developers.google.com/gmail/api/quickstart/php

で命令を完了しました。

$client = getClient(); 
$service = new Google_Service_Gmail($client); 

$user = 'me'; 
$labels = array('labelIds' => array('Label_41')); 
$messagesResponse = $service->users_messages->listUsersMessages($user, $labels); 
$messages = $messagesResponse->getMessages(); 

foreach ($messages as $message) { 
    echo 'Message with ID: ' . $message->getId(); 

    echo $message->getLabelIds(); 

    if($message->getLabelIds() == null) echo " (NO LABEL) "; 

    echo "\n"; 
} 

ただし、ここにあるすべてのメールには、端末の出力が示すように、ラベルが割り当てられていません。私はここで何をやったのですか?

enter image description here

+0

Label_41ラベルとメールのすべての添付ファイルをダウンロードした最終的なコードです。 'また、パラメータは、 'INBOX'のようないくつかの標準のものを除いて、テキストではなく、Idでなければなりません。この例を確認してくださいhttps://stackoverflow.com/a/41273594/4621324 – Axalix

+0

@Axalix thxのリンクです。あなたのレコーディングされたコードの助けを借りて私はそれを働かせるように管理しました。 Google-API for PHPは、実際には改善が必要です。 – Adam

+1

Google APIドキュメントは「ゴミ」と呼ばれています... – Axalix

答えて

0

問題は、foreachループ内$messageオブジェクトはほとんどのデータが含まれていないことです。 fullパラメータでメッセージオブジェクトを開始する必要があります。これは、代わりに配列 `$ラベル=配列(「labelIds」=>「Label_41」)の、文字列パラメータでそれを試してみてください

client = getClient(); 
$service = new Google_Service_Gmail($client); 

$user = 'me'; 
$optParams = []; 
$optParams['labelIds'] = 'Label_41'; 

$messagesResponse = $service->users_messages->listUsersMessages($user, $optParams); 
$messages = $messagesResponse->getMessages(); 

foreach ($messages as $message) { 
    echo 'Message with ID: ' . $message->getId(); 

    $messageId = $message->getId(); 

    $optParamsGet = []; 
    $optParamsGet['format'] = 'full'; // Display message in payload 
    $message = $service->users_messages->get($user,$messageId,$optParamsGet); 

    $messagePayload = $message->getPayload(); 
    $headers = $message->getPayload()->getHeaders(); 
    $parts = $message->getPayload()->getParts(); 

    $timestamp = ($message->internalDate)/1000; 

    $date = date('Y-m-d H-i-s', $timestamp); 

    foreach ($parts as $part) { 
     if($part->mimeType == 'application/pdf'){ 
      $attachmentId = $part['body']['attachmentId']; 
     } 
    } 

    $data = $service->users_messages_attachments->get($user, $messageId, $attachmentId); 
    $data = $data->data; 
    $data = strtr($data, array('-' => '+', '_' => '/')); 

    $filename = "Car2Go " . $date . ".pdf"; 

    if(!file_exists($filename)){ 
     $fh = fopen($filename, "w+"); 
     fwrite($fh, base64_decode($data)); 
     fclose($fh); 
    } 
    else{ 
     'File ' . $filename . 'already exists!'; 
    } 

    echo "\n"; 
} 
関連する問題