【问题标题】:How to alternate email forwarding recipients?如何替换电子邮件转发收件人?
【发布时间】:2013-04-13 00:11:20
【问题描述】:

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

当我收到电子邮件时,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 脚本中完成此操作,以便在所有新电子邮件到达时处理它们?

【问题讨论】:

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


    【解决方案1】:

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

    假设:

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

    方法:

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

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

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

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

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

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

    脚本

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

    记得适当更改labelName

    脚本会进行一些错误检查,但不会验证电子邮件地址 - 邮件可能因此而导致转发操作失败。注意事项。

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

    触发器

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

    【讨论】:

    • 非常感谢您的帮助!不过,我遇到了一些麻烦。我收到此消息:“无效的电子邮件:未定义(第 22 行,文件“代码”)解雇”
    • @user2276334 - 您的电子表格是否在 A 列中仅包含电子邮件地址的列表?电子邮件地址的格式是否正确,例如Person@gmail.com?
    • 是的,我只是不断收到错误消息发送到我的收件箱。不过,我想我想出了一个解决办法。也许你可以在我的其他线程中帮助我。我想出了一种不同的方法来完成“电子邮件随机化器”。我只是不知道如何触发它。这是另一页:stackoverflow.com/questions/15992975/…
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 2019-03-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多