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

Seb*_*ann 7 javascript regex gmail parsing google-apps-script

这是我尝试从头开始编写的第一个脚本.到现在为止一直没有好处,所以我会请求一些帮助.

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

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

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

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

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

  4. 摆脱唯一标记信息以防止重复运行.

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

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

}
} 
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

谢谢塞巴斯蒂安

poi*_*ick 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

代码中的一个错误是appendRow函数接受[ ]括号内指定的元素数组.

根据您附加此脚本的位置,您的代码行:

var ss = SpreadsheetApp.openById(id);
Run Code Online (Sandbox Code Playgroud)

如果脚本是在电子表格的脚本编辑器中编写的,那么就不需要记录这些电子邮件.但是,如果该电子表格中有多个工作表,则可以替换我的行

var ss = SpreadsheetApp.getActiveSheet();
Run Code Online (Sandbox Code Playgroud)

通过

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
Run Code Online (Sandbox Code Playgroud)

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

var msg = messages[i].getPlainBody();
Run Code Online (Sandbox Code Playgroud)

现在你可以为regex编写另一个函数并将消息传递msg给它.希望这可以帮助!


Tia*_*vêa 7

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

\n

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

\n

如何使用

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

改变领域

\n

如果您想保存不同的消息属性,请查看gmail-message 类并更改脚本文件,将下面的代码用 \xe2\x9c\x8f\xef\xb8\x8f(铅笔)注释掉。

\n