Javascript 从Gmail线程收集唯一的电子邮件地址

Javascript 从Gmail线程收集唯一的电子邮件地址,javascript,arrays,google-apps-script,google-sheets,gmail,Javascript,Arrays,Google Apps Script,Google Sheets,Gmail,我对Google Apps脚本不熟悉,我正在尝试为电子表格创建一个脚本,在该脚本中,我将在工作表中存储.getFrom()方法找到的所有电子邮件地址,并忽略相同的电子邮件地址,以便我只获得一个电子邮件地址,而不是多次。到目前为止,存储是成功的,但忽略相同的电子邮件是行不通的。我在工作表的专栏里多次收到相同的电子邮件 这是我的密码: var n=threads.length; var messages=thread.getMessages(); var getf

我对Google Apps脚本不熟悉,我正在尝试为电子表格创建一个脚本,在该脚本中,我将在工作表中存储
.getFrom()
方法找到的所有电子邮件地址,并忽略相同的电子邮件地址,以便我只获得一个电子邮件地址,而不是多次。到目前为止,存储是成功的,但忽略相同的电子邮件是行不通的。我在工作表的专栏里多次收到相同的电子邮件

这是我的密码:

      var n=threads.length;
      var messages=thread.getMessages();
      var getfrom = 0;
      var allMails = [];
      for (var i=0; i<n; i++)
      {
         for (var j=0; j<messages.length; j++)
         {
            var message=messages[j];
            getfrom = message.getFrom();
            var first_name = getfrom.substring(0, getfrom.indexOf(" "));
            var last_name = getfrom.substring(getfrom.indexOf(" ")+1, getfrom.indexOf(" <"));
            var email_address = 0;
            if (first_name == '' && last_name == '')
            {
               email_address = getfrom;
            } else {
               email_address = getfrom.substring(getfrom.indexOf("<")+1, getfrom.indexOf(">"));
            }

            // This is how I check if I already have the email address or not

            if (email_address == my_email || email_address[j] == email_address[j-1])
            {
               continue;
            }
          }
          allMails.push([email_address]);
      }
      Logger.log(allMails);
      sheet1.getRange(2, 3, n, 1).setValues(allMails);
      Browser.msgBox("Operation complete");
var n=threads.length;
var messages=thread.getMessages();
var-getfrom=0;
var-allMails=[];

对于(var i=0;i,您需要交叉检查您的AllMail数组中的给定电子邮件地址,以确保它不在列表中,但是您无法直接检查AllMail,因为它是一个二维数组

我添加一个一维数组纯粹是为了交叉检查

  var n=threads.length;
  var messages=thread.getMessages();
  var getfrom = 0;
  var allMails = [];
  var cross_check = [];

  for (var i=0; i<n; i++)
  {
     for (var j=0; j<messages.length; j++)
     {
        var message=messages[j];
        getfrom = message.getFrom();
        var first_name = getfrom.substring(0, getfrom.indexOf(" "));
        var last_name = getfrom.substring(getfrom.indexOf(" ")+1, getfrom.indexOf(" <"));
        var email_address = 0;
        if (first_name == '' && last_name == '')
        {
           email_address = getfrom;
        } else {
           email_address = getfrom.substring(getfrom.indexOf("<")+1, getfrom.indexOf(">"));
        }

        if(email_address != my_email && cross_check.indexOf(email_address) == -1){
           cross_check.push(email_address);
           allMails.push([email_address]);
        } 
      }

  }
  Logger.log(allMails);
  sheet1.getRange(2, 3, n, 1).setValues(allMails);
  Browser.msgBox("Operation complete");
var n=threads.length;
var messages=thread.getMessages();
var-getfrom=0;
var-allMails=[];
var交叉检查=[];

对于(var i=0;i您可以在将电子邮件添加到列表之前确保唯一性,或者先构建完整列表,然后删除重复的邮件

选项1:预过滤器 本例构建了一个一维地址数组;因为它是一个简单数组,所以我们可以使用JavaScript内置的.indexOf()方法检查唯一性。检查完所有线程后,使用另一个内置数组,
map()将该简单数组转换为二维数组以存储在电子表格中
。但在此之前,数组会被排序-因为我们可以。您可能需要执行其他筛选,例如删除“无回复”地址

函数getUniqueFromAddresses1(){ var my_email=Session.getActiveUser().getEmail(); var threads=GmailApp.getInboxThreads(); var n=螺纹长度; var-allMails=[];
对于(var i=0;i还检查-它将Gmail的电子邮件地址保存在谷歌电子表格中。

除了检查整个allMais数组中的新电子邮件是否存在,如果不存在,则推送,我如何检查
AllMail
数组中的所有邮件并忽略/删除相同的电子邮件,然后推送您的问题中的de不是一个数组;如果代码的功能足以重现您的问题,它将帮助人们贡献他们的时间来帮助您。看起来不错-但OP也排除了他们发送的消息。此检查不能做到这一点。此外,与其使用两个数组,不如只使用一个数组,然后将其转换为
setValues()的二维数组
?很好的回答:检查我的电子邮件。决定建议使用第二个数组,因为这是对现有代码的最小更改,而我往往就是这样懒惰。正如你所看到的,我有点喜欢这个问题!:)@CameronRoberts,非常感谢您的回复。这看起来很简单,在日志中我只收到了证明其有效的独特电子邮件,但出于某些原因,它没有保存在我的工作表中。知道为什么吗?非常感谢您花时间发布此答案。我也会检查此答案,但我正在寻找简单的答案,所以我将首先尝试Robert的代码!