2015-10-01 183 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

相关问题