2017-05-23 17 views
0

私はこのGoogle Appsスクリプトを使用して、Gmailメッセージの本文テキストからデータフィールドを抽出して解析しています。スクリプトを変更して、自分の電子メールにあるフィールドで動作するようにしました。しかし、私は電子メールの件名が異なる場合にのみ動作することを発見しました。たとえば、件名が異なる5つの電子メールがある場合、スクリプトはGoogleのスプレッドシートに5つの行を作成し、電子メールごとに1つずつ作成します。しかし、同じ件名の電子メールを5通持っている場合は、受信トレイにある最も古い電子メールに対して1行しか取得できません。このスクリプトをどのように変更して、件名がすべての電子メールで同じになるように誰にも分かりますか?ありがとう!Google Apps Script - 同じ件名のGmail本文からデータを解析する

/* Based on https://gist.github.com/Ferrari/9678772 */ 

function parseEmailMessages(start) { 

start = start || 0; 

var threads = GmailApp.getInboxThreads(start, 100); 
var sheet = SpreadsheetApp.getActiveSheet(); 

for (var i = 0; i < threads.length; i++) { 

// Get the first email message of a threads 
var tmp, 
    message = threads[i].getMessages()[0], 
    subject = message.getSubject(), 
    content = message.getPlainBody(); 

// Get the plain text body of the email message 
// You may also use getRawContent() for parsing HTML 

// Implement Parsing rules using regular expressions 
if (content) { 

    tmp = content.match(/Name:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var username = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/Title:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var title = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/Organization:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var organization = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/City:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var city = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/State:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var state = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/country:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var country = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/E-mail:\s*([\s\S]+)/); 
    var email = (tmp && tmp[1]) ? tmp[1] : 'No comment'; 

    sheet.appendRow([username, title, organization, city, state, country, email]); 

} // End if 

    } // End for loop 
} 

答えて

0

この行:message = threads[i].getMessages()[0]は、スレッド内の最初の(最も古い)メッセージ、スレッド配列の、すなわちインデックス0を取り出します。スレッド内の各メッセージを繰り返し処理したいので、スレッド全体を新しい配列に取得する必要があります。要するに、getMessages()呼び出し後に配列インデックスを失います。私はまだデータの1行しか取得しています

threads = GmailApp.getInboxThreads(start, 100) 
for (i = 0; i < threads.length; i++) 
    messages = threads[i].getMessages() 
    for (j = 0; j < thread.length; j++) 
    subject = messages[j].getSubject() 
    content = messages[j].getPlainBody() 
    etc... 
+0


は、このロジックを試してみてください。 – dlc3172

+0

非常に奇妙です!私はあなたのコードと私の両方のテストを実行するたびに、実装ごとに異なる数の行を取得しました。同じ件名の電子メールがスレッド表示されていますか?電子メールの件名を他の出力とともに記録すると、どのように表示されますか?あなたが見ているものに貢献している最初の100スレッドだけを取得していますか? –

+0

さて、私は、各件名が一意であるように、オンラインフォームデータをメールするphpファイルのコードを変更することにしました(これは、各電子メールの件名にユーザの投稿した電子メールアドレスを追加したものです)。私はそれぞれの電子メールをそれ自身の行に入れます。ご協力いただきありがとうございます! – dlc3172

関連する問題