2015-10-01 180 views
6

這是我嘗試從頭開始編寫的第一個腳本。到現在爲止,這並不好,所以我要去尋求一些幫助。Google Apps腳本 - 從Gmail中提取數據到電子表格

案例:我收到來自電子商務網站的電子商務確認電子郵件,沒有回覆電子郵件地址。在電子郵件的正文中,他們從買家處發送電子郵件地址我想發送一封自動郵件到身體的電子郵件地址。

我打算如何做到這一點(任何建議,以消除步驟將被感謝)。

  1. 使用規則標記傳入電子郵件與唯一標記。

  2. 使用該標籤通過腳本識別gmail中的電子郵件,逐一瀏覽並提取我需要的信息。使用正則表達式和電子郵件正文內容來提取我需要發送自動電子郵件的電子郵件地址。計劃是從主體獲得:主題,日期和電子郵件。

  3. 將所有信息寫入電子表格。

  4. 擺脫獨特的標籤信息,以防止重複運行。

  5. 然後使用表單mule插件從電子表格發送電子郵件。

到目前爲止,我已經經歷了步驟1(易),並與步驟2和3(我不是一個編碼器有點吃力了,我能讀,undestrand和黑客。從頭開始編寫是一個完全不同的事情)。我認爲這是處理它的最好方法之前,我處理了4。

隨着腳本我提取信息到電子表格,與插件我使用電子表格中的信息發送電子郵件。

這是迄今爲止編寫的代碼。我以後離開了正則表達式部分,因爲我甚至不能在電子表格中寫入任何東西。一旦我得到那個工作,生病就開始在正則表達式中工作,並「刪除腳本的標籤」方面。

function myFunction() { 
    function getemails() { 
    var label = GmailApp.getUserLabelByName("Main tag/subtag"); 
    var threads = label.getThreads(); 
    for (var i = 0; i < threads.length; i++) { 
    var messages=threads[i].getMessages(); 
     for (var j = 0; j < messages.length; j++) { 
    var message=messages[j]; 
    var subject=message.getSubject(); 
    tosp(message); 
     } 
    } 
    } 

    function tosp(message){ 
    var body=message.getBody() 
    var date=message.getDate(); 
    var subject=message.getSubject(); 
    var id= "my spreasheet id"; 
    var ss = SpreadsheetApp.openById(id); 
    var sheet = ss.getActiveSheet(); 
    sheet.appendRow(subject,date,body);  

} 
} 

任何幫助,將不勝感激。

感謝 塞巴斯蒂安

回答

15

以下是代碼我寫的和測試執行你提到非常清楚的步驟2,3和4。

function myFunction() { 

    var ss = SpreadsheetApp.getActiveSheet(); 

    var label = GmailApp.getUserLabelByName("MyLabel"); 
    var threads = label.getThreads(); 

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

    for (var j=0; j<messages.length; j++) 
    { 
     var msg = messages[j].getBody(); 
     var sub = messages[j].getSubject(); 
     var dat = messages[j].getDate(); 

     ss.appendRow([msg, sub, dat]) 
    } 
     threads[i].removeLabel(label); 
    } 
} 

一個在代碼中的故障是,appendRow函數接受[ ]括號內指定的元件的陣列。

取決於你在哪裏安裝這個腳本,你的代碼行:

var ss = SpreadsheetApp.openById(id); 

是沒有必要的,如果腳本正被寫入要記錄這些電子郵件中的電子表格的腳本編輯器。但是,如果有多個表在電子表格中,您可以通過

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Sheet1"); 

另一個建議是,當前的代碼會給你HTML格式的郵件代替我行

var ss = SpreadsheetApp.getActiveSheet(); 

。因此,如果你想要得到的消息以純文本格式如您所見,使用方法:

var msg = messages[i].getPlainBody(); 

現在你可以寫正則表達式的另一個功能和傳遞消息msg了這一點。希望這可以幫助!

+0

這樣一個很好和詳細的解釋!我只是無法通過沒有給大拇指'pointNclick'! – Zongjun

+0

@pointNclick,對不起舊線程。但無法幫助回覆....我有5000 +郵件(線程)在Gmail中的標籤。但上面的代碼只列出了524條消息到谷歌電子表格。調試模式下的Thread.length只顯示500.可能是什麼原因? – sifar786

相關問題