0

我试图找出是否可以设置一些东西来将电子邮件转发给交替的收件人。

当我收到电子邮件时,GMail 过滤器会标记其中的一些,例如用“大象”标记。

有多个人可以处理“大象”电子邮件,所以我想将每封新电子邮件转发给其中一个,循环浏览“大象处理程序”列表。(比如说,Joe、Amy 和 Tammy。)他们的电子邮件地址可以在电子表格中找到。

         A
1 joe@example.com
2 amy@example.com
3 tammy@example.com

伪代码:

Get first unread email
  Forward email to Joe
Get next unread email
  Forward email to Amy
Get next unread email
  Forward email to Tammy
Go to start

如何在 Google Apps 脚本中完成此操作,以便它在所有新电子邮件到达时处理它们?

4

1 回答 1

1

可以通过多种方式做到这一点。在电话领域,这种行为称为Hunt Group。这是一个借用该概念来帮助您入门的建议。

假设:

  • 您正在使用 Gmail。
  • 该脚本将与 Gmail 帐户属于同一帐户持有人。

方法:

  • 您将在 Gmail 中设置一个过滤器来识别符合您条件的传入邮件 - “大象”电子邮件。

  • 在此过滤器中,您将对新电子邮件应用标签 - “大象” - 脚本将使用该标签来识别“待办事项”。

  • 电子表格将用于包含一个脚本,该脚本将扫描与“大象”标签相关的未读消息并转发它们。

  • 该脚本将设置为以适合您的时间间隔触发计时器事件。

  • 电子表格将包含(格式正确的)目标电子邮件地址列表;乔、艾米、塔米。脚本将读取这些并按顺序使用它们。

  • 处理完一封电子邮件后,它将被标记为“已读”。您可以选择取消标记、重新标记、归档或丢弃它们。

剧本

此脚本使用 ScriptProperties 跟踪哪个收件人将获得下一条转发的消息。如果您希望收到大量消息,则需要对其进行增强以支持批量获取消息。

记得labelName适当改变。

该脚本会进行一些错误检查,但不会验证电子邮件地址 - 消息可能因此而导致转发操作失败。买者自负。

这也可以作为 gist 获得

/**
 * Retrieves a given user label by name and forwards unread messages
 * associated with that that label to a member of the Hunt Group.
 */
function huntGroupForward() {
  // get the label for given name
  var labelName = "elephant"
  var label = GmailApp.getUserLabelByName(labelName);
  if (label == null) throw new Error("No messages for label "+labelName);
  // get count of all threads in the given label
  var threadCount = label.getUnreadCount();
  if (threadCount == 0) return;  // quick exit if nothing to do.
  var threads = label.getThreads();
  var messages = [];
  for (var i in threads) {
    if (threads[i].isUnread()) {
      messages = messages.concat( threads[i].getMessages() );
    }
  }
  for (var i = 0; i < messages.length; i++) {
    if (messages[i].isUnread()) {
      messages[i].forward(nextHuntGroupMember());
      messages[i].markRead();
    }
  }
};

/*
 * Global object to store working copy of the Hunt Group
 */
var huntGroup = { next : 0, members : [] };

/*
 * Get the email address of the next Hunt Group Member
 * to forward a message to.
 */
function nextHuntGroupMember() {
  if (huntGroup.members.length == 0) {
    // Load members
    var sheet = SpreadsheetApp.getActiveSheet();
    var data = sheet.getDataRange().getValues();
    for (var i = 0; i < data.length; i++) {
      huntGroup.members.push(data[i][0])
    }
    // Make sure we have members
    if (huntGroup.members.length == 0) {
      throw new Error("Found no email addresses");
    }
  }

  // Retrieve next index. Properties are always stored as strings, so
  // we need to parse the retrieved value to use it as a Number.
  var next = parseInt(ScriptProperties.getProperty("nextHuntGroupMember"));
  if (next != null) {
    huntGroup.next = next;
  }
  else {
    next = 0;
  }

  // get next member to be used
  var nextMember = huntGroup.members[next];
  // ... then move on to new next (increment modulo list length)
  next = ++next % huntGroup.members.length;
  // store the new next value
  ScriptProperties.setProperty("nextHuntGroupMember", next);

  return nextMember;  
}

扳机

一旦您对脚本感到满意,请将其设置为定期运行。这是您将其设置为每小时运行的方式:

扳机

于 2013-04-13T05:06:49.557 回答