用于将 gmail 收件箱与工作表同步的 Google App 脚本

Google App Script to sync gmail inbox with sheets

我有一个脚本从 gmail 帐户中提取数据。该脚本扫描收件箱中的邮件并找到相关的文本行并将其放入 Google 表格中。

电子邮件看起来像:

车辆:5761364,位置:(Google 地图的网址)

我用来获取数据到工作表的脚本是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function processInboxToSheet() {
  var start = 0;
  var threads = GmailApp.getInboxThreads(start, 100);
  var sheet = SpreadsheetApp.getActiveSheet();
  var result = [];

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();

    var content = messages[0].getPlainBody();

    if (content) {
      var tmp;
      tmp = content.match(/Vehicle:\\s*([A-Za-z0-9\\s]+)(\
?\
)/);
      var username = (tmp && tmp[1]) ? tmp[1].trim() : 'No vehicle';

      tmp = content.match(/Map Link:\\s*([A-Za-z ][A-Za-z0-9!@#$%?=^.,:&*/ ]+)/);
      var comment = (tmp && tmp[1]) ? tmp[1] : 'No url';

      sheet.appendRow([username, comment]);

      Utilities.sleep(500);
    }
  }
};

是否可以实现一种同步功能,让 Google 工作表与收件箱中的电子邮件一起自动更新。现在它每次运行时都会重复。

另外,如果电子邮件被删除,是否可以让脚本删除创建的行。所以工作表列表总是与收件箱同步?

如果没有意义,请问我。


为了解决重复邮件的问题,您需要检查邮件是否未读。如果它未读,则阅读它并在之后将其设为已读。我在 YouTube 上制作了视频系列来解释这是如何实现的,并在 github 上发布了完整的代码。你可以在这里观看:

https://youtu.be/nI1OH3pAz6s?t=9

您也可以通过以下链接从 GitHub 获取完整代码:

  • GitHub:将 Gmail 电子邮件导入 Google 表格

  • GitHub:从 Gmail 电子邮件中提取正文内容


您可以从基于时间的触发器运行您的脚本,如果您每次都重写整个工作表,那么这将负责消除已删除电子邮件中的条目。如果您可以将收到的日期添加到电子表格中,那么您可以按日期排序。