0

私はSOやGoogleでこれを調べていますが、動作しているものは何も見つかりません。Google Script - Gmailからのデータをシートに取得

私は下のコードを実行しているとき、私は画像上の結果を取得しています。

最新の最新のthreadから特定のラベルを持つメールにデータを抽出します。

しかし、私のGmailには、太字で強調表示されている"Action"-labelの3つのメールしかありません。
他のメールは削除されているため、ゴミ箱にありますが、まだ「アクション」というラベルが付いています。

私は"Action"-labelを持っているメールのみを表示したいと思います - 私は最新のthreadの時間/日付、件名、およびIDを欲しいので、そのメールへのリンクを作成できます。

Google Sheet data example

function myFunction() { 

    var ss = SpreadsheetApp.getActiveSheet(); 

    var query = "label:action -label:trash -label:action-done -from:me"; 

    var threads = GmailApp.search(query); 

    for (var i = 0; i < threads.length; i++) 
    { 
     var messages = threads[i].getMessages(); 

     for (var j = 0; j < messages.length; j++) 
     { 
     var mId = messages[j].getId() 
     var from = messages[j].getFrom(); 
     var cc = messages[j].getCc(); 
     var time = messages[j].getDate() 
     var sub = messages[j].getSubject(); 

     ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/'+mId]) 
     } 
    } 
    } 
} 
+0

あなたがのために '繰り返してきた(私は= 0 VAR;私はthreads.lengthを<;私は++){VARメッセージ=スレッド[i]を.getMessages();'二回、確かに取得するのに役立ちありません正しい出力。それは価値があるため、あなたのスクリプトを実行しているときに私は削除された電子メールを取得しません。 – FTP

+0

@ 6'whitemaleええ、ちょうど "タイプミス"でしたが、私は同じ結果を得ます。別のメールに返信したメールを保管しようとしましたか? – Niclas

答えて

2

私はそれを解決するために、配列の中で最大のインデックスを見つけることで管理しました。
私はコードにコメントしたので、他の人を助けることができます。皆さんありがとう。

function myFunction() { 
    // Use sheet 
    var ss = SpreadsheetApp.getActiveSheet(); 
    // Gmail query 
    var query = "label:support -label:trash -label:support-done -from:me"; 
    // Search in Gmail, bind to array 
    var threads = GmailApp.search(query); 
    // Loop through query results 
    for (var i = 0; i < threads.length; i++) 
    { 
    // Get messages in thread, add to array 
    var messages = threads[i].getMessages(); 

    // Used to find max index in array 
    var max = messages[0]; 
    var maxIndex = 0; 

    // Loop through array to find maxIndexD = most recent mail 
    for (var j = 0; j < messages.length; j++) { 
     if (messages[j] > max) { 
     maxIndex = j; 
     max = messages[j]; 
     } 
    } 
    // Find data 
    var mId = messages[maxIndex].getId() // ID used to create mail link 
    var from = messages[maxIndex].getFrom(); 
    var cc = messages[maxIndex].getCc(); 
    var time = threads[i].getLastMessageDate() 
    var sub = messages[maxIndex].getSubject(); 
    // Write data to sheet 
    ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/'+mId]) 
    } 
} 
0

あなたは最近のことで何を意味するのですか?

追加の方法についてnewer_than:3d? 自分のGmailアカウントで検索をテストできます。必要なときにクエリに貼り付けるだけです。

+0

Gmailでnewer_thanを使用するとゴミ箱メールが届きますが、Gmailで 'label:action -label:trash -label:action-done -from:me'というクエリを使用すると正しい結果が得られます。スクリプトはまだ間違った結果を示しています。 – Niclas

+0

** label:action newer_than:3d -in:ごみ箱**についてはいかがですか。実際、私は自分のアカウントのゴミ箱ではないと言っている必要はありません。私は実際にゴミ箱から取り出したい場合は** in:ゴミ箱**を使用する必要があります。 – Cooper

関連する問題