如何替代电子邮件转发收件人?

时间:2013-04-13 00:11:21

标签: google-apps-script google-sheets gmail

我正在试图找出是否可以设置一些内容以便将电子邮件转发给交替的收件人。

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

有多个人可以处理“大象”电子邮件,所以我想将每封新电子邮件转发给一个,然后在“大象处理程序”列表中循环播放。 (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脚本中完成此操作,以便它在到达时处理所有新电子邮件?

1 个答案:

答案 0 :(得分:1)

可以通过多种方式实现这一目标。在电话领域,这种行为被称为 Hunt Group 。这是一个借用这个概念来帮助你开始的建议。

假设:

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

方法:

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

  • 在此过滤器中,您将为新电子邮件应用标签 - “elephant” - 该脚本将用于标识“要做的工作”。

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

  • 脚本将以适合您的间隔在计时器Trigger上设置为event

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

  • 处理完电子邮件后,系统会将其标记为“已读”。您可以选择取消标记,重新标记,存档或删除它们。

剧本

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

请务必正确更改labelName

脚本执行一些错误检查,但不验证电子邮件地址 - 由于这种情况,消息可能最终导致转发操作失败。警告Emptor。

这也是available as a 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;  
}

触发

一旦您对脚本感到满意,请将其设置为定期运行。这就是你如何将其设置为每小时运行一次:

Trigger