Google Apps脚本 - 将数据从Gmail中提取到电子表格中

时间:2015-10-01 15:03:02

标签: javascript regex parsing google-apps-script gmail

这是我尝试从头开始编写的第一个脚本。到现在为止一直不好,所以我会去寻求帮助。

案例:我收到来自电子商务网站的电子商务确认电子邮件,没有回复电子邮件地址。在电子邮件的正文中,他们会从买家发送电子邮件地址。我想将自动邮件发送到正文的电子邮件地址。

我打算如何做到这一点(将会感谢任何消除步骤的建议。)

  1. 使用规则标记带有唯一标记的传入电子邮件。

  2. 使用该标签通过脚本识别gmail中的电子邮件,逐个进行并提取我需要的信息。将正则表达式与电子邮件正文内容一起使用,以提取我需要发送自动电子邮件的电子邮件地址。计划是获取:主题,日期,来自正文的电子邮件。

  3. 将所有信息写入电子表格。

  4. 删除唯一标记信息以防止重复运行。

  5. 然后使用表单mule addon从电子表格发送电子邮件。

  6. 到目前为止,我已经处理了第1步(简单),并且一直在处理第2步和第3步(我不是编码器,我可以阅读,不支持和黑客攻击。从头开始编写是完全不同的事情) 。在我认为这是处理它的最佳方式之前,我已经处理了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);    
    
    }
    } 
    

    任何帮助将不胜感激。

    由于 塞巴斯蒂安

2 个答案:

答案 0 :(得分:21)

以下是我编写和测试的代码,它完美地执行了您提到的第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.getActiveSheet();

通过

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

另一个建议是,当前代码将为您提供HTML格式的消息。因此,如果您希望在查看时以纯文本格式显示消息,请使用:

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

现在您可以为正则表达式编写另一个函数,并将消息msg传递给它。希望这有帮助!

答案 1 :(得分:1)

@pointNclick回答您的问题。但是我准备了一个易于使用的脚本,并从一开始就说明了如何使用该脚本,对此谁需要更多帮助。

它在gmail-to-google-sheets-script存储库中。只需阅读内容并按照说明进行操作即可。

使用方法

  • 创建一个新的Google表格
  • 访问菜单工具>脚本编辑器
  • 将内容从gmailt-to-sheets.gs复制到编辑器,在那里替换示例代码
  • SEARCH_QUERY上的值替换为实际查询(首先在gmail上进行搜索,然后将搜索词复制并粘贴到此处)
  • 在菜单上选择saveEmails(在“运行”和“调试”按钮附近)
  • 点击“运行”按钮
  • 它将在首次运行时请求授权,然后继续接受它(这是您的Gmail帐户授权了您的Google脚本帐户)
  • 运行后,结果将应用于您的工作表

更改字段

如果要保存其他消息属性,请查看gmail-message class,并在注释Sheet header columnsValues to get and store下面的代码处更改脚本文件。