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

问题描述 投票:0回答:3

这是我尝试从头开始编写的第一个脚本。到目前为止还没有什么好处,所以我要寻求一些帮助。

案例:我收到来自电子商务网站的电子商务确认电子邮件,但没有回复电子邮件地址。在电子邮件正文中,他们发送买家的电子邮件地址。我想向该机构的电子邮件地址发送一封自动邮件。

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

  1. 使用规则为传入的电子邮件添加唯一标签。

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

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

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

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

到目前为止,我已经处理了步骤 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);    

}
} 

如有任何帮助,我们将不胜感激。

谢谢 塞巴斯蒂安

javascript regex parsing google-apps-script gmail
3个回答
32
投票

以下是我编写和测试的代码,可以很好地执行您提到的步骤 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
传递给它。希望这有帮助!


7
投票

我制作了一个现成的脚本,为那些需要更多帮助的人解释了如何使用它(从一开始)。

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

如何使用

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

改变领域

如果您想保存不同的消息属性,请查看 gmail-message class 并更改您的脚本文件,用 ✏️(铅笔)注释下面的代码。


0
投票

有一些工作区插件可以使这项工作变得非常简单,例如:https://workspace.google.com/u/0/marketplace/app/email_parser/40769086099这是最容易使用的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.