2017-09-03 161 views
0

我正在研究一個R & D項目,其中使用Linux命令收集我的服務器端統計信息並將其輸出到我的郵件。現在我的計劃是讀取和parseGmail內容,它具有我的服務器數據(如下所示)並將其提取到Google Sheets。我的Gmail內容如下所示,其中包含行和列中的數據。如何解析Gmail郵件以將數據提取到Google表格

Date&Time JVM PID CPU MEM FGC 
03-09-2017-09-08-PM abc01_xzy01 12345 1.2% 2.75 3 
03-09-2017-09-08-PM abc01_xzy01 12345 3.5% 2.71 4 
03-09-2017-09-08-PM abc01_xzy01 12345 4.6% 2.79 5 

我在這裏的想法是相同的方式準確地拉入Google Sheet。我正在使用下面的代碼,但它無法讀取內容。我在想它是否與所用的RegExp有關。您能否告訴我代碼必須寫在if聲明中。

function parseEmailMessages(start) { 

    start = start || 0; 

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

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

    var tmp, 
     message = threads[i].getMessages()[0], 
    // subject = message.getSubject(), 
    subject = "SERVER TEST REPORT", 
     content = message.getPlainBody(); 

    if (content) { 

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

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

     sheet.appendRow([username, email, subject, comment]); 

    } 

    } 
} 

我的輸出只是打印在谷歌表No Date & TimeNo JVM。我想打印郵件中給出的列和行中的名稱和數據。有人可以幫助我,告訴我什麼是錯誤的,以及如何像預期一樣提取數據。提前致謝。

回答

1

如果您的電子郵件中的所有內容都是您上面發佈的內容,則會將其放入您的電子表格中。更改電子郵件主題和工作表名稱以滿足您的需求。

function getGmail() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var threads = GmailApp.search('IMPORTANT1', 0, 10); 

    for (var i = 0; i < threads.length; i++) { 
    var messages = GmailApp.getMessagesForThread(threads[i]); 
    for (var j = 0; j < messages.length; j++) { 
    var msg=messages[j].getPlainBody(); 
    var msg=msg.trim() 
    } 
} 
result1(msg) 
    } 
function result1(range) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet1 = ss.getSheetByName("Sheet1") 
    var lr=sheet1.getLastRow() 
    var output=[] 
    var line=range.split("\n") 
    for(j=0;j<line.length;j++){ 
    output.push(line[j].split(" ")) 
    } 
    sheet1.getRange(lr+1, 1, output.length, output[0].length).setValues(output) 
} 
+0

感謝您的建議Ed。我有幾個疑問。你能否澄清一下。我在哪裏可以提及主題名稱,以便它可以直接查找相應主題並提取郵件內容。此外,在執行代碼後,我觀察到所有數據都被粘貼在一行中,而不是在第一行結束後進入新行。你能幫我解決這個問題嗎 – Dev

+0

我附上一個共享的電子表格,你可以複製並嘗試。它有一張帶有說明的筆記。當您複製它時,您將成爲所有者,並將獲得您的Gmail。至於單排。該腳本在行尾查找/ n新行以知道將它們分開的位置。您的電子郵件不得包含換行符。最簡單的事情就是將它們添加到您的Linux提要中。爲了測試,您可以發送一封電子郵件,在每行之後一次一個地複製您的線路。 https://docs.google.com/spreadsheets/d/1NAPlj86NGlpjYrWqG7EJdlDUd2zS0DeweqqSQgODx24/edit?usp=sharing –

+0

謝謝埃德。這很有幫助。 – Dev

相關問題