繁体   English   中英

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

[英]Google Apps Scripts - Extract data from gmail into a spreadsheet

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

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

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

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

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

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

  4. 摆脱独特的标签信息以防止重复运行。

  5. 然后使用表单 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);    

}
} 

任何帮助,将不胜感激。

谢谢塞巴斯蒂安

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

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

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

如何使用

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

更改字段

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

@pointNclick 的解决方案适用于一次性执行。 如果您在 Gmail 线程中收到一封已被脚本“处理”的新电子邮件怎么办? 该脚本最终重新处理线程中的旧电子邮件。 您将如何防止发生重复读取?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM