Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何根据从gmail到google sheets的标签获取个人电子邮件的正文_Google Apps Script_Google Sheets_Gmail - Fatal编程技术网

Google apps script 如何根据从gmail到google sheets的标签获取个人电子邮件的正文

Google apps script 如何根据从gmail到google sheets的标签获取个人电子邮件的正文,google-apps-script,google-sheets,gmail,Google Apps Script,Google Sheets,Gmail,每天我都会收到0-20封电子邮件,基本上是这样的: 姓名:姓 电话号码:555-867-5309 电邮地址:Fake@email.com 位置:PreferedBranch的名称 请求:ThingPerson想要什么 我正试图根据所列位置将这些电子邮件的正文发送到不同的谷歌表单。因此,如果填写表单的人说Location1适合他们,我希望将消息正文发送到Location1的工作表中。 如果此人说Location2,则消息正文应转到Location2的工作表,依此类推。每次收到一封这样的邮件,我都会

每天我都会收到0-20封电子邮件,基本上是这样的:

姓名:姓

电话号码:555-867-5309

电邮地址:Fake@email.com

位置:PreferedBranch的名称

请求:ThingPerson想要什么

我正试图根据所列位置将这些电子邮件的正文发送到不同的谷歌表单。因此,如果填写表单的人说Location1适合他们,我希望将消息正文发送到Location1的工作表中。 如果此人说Location2,则消息正文应转到Location2的工作表,依此类推。每次收到一封这样的邮件,我都会让Gmail根据地址贴上不同的标签。理想情况下,我希望设置一个每15分钟运行一次的触发器,并且不会重复已经在流程中运行的结果

我在其他类似的问题上发现了一些代码,这让我很沮丧,但我似乎不能完全正确地回答。以下是我目前正在处理的问题:

    function myFunction() {

      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName('NameOfSheet');

      var label = GmailApp.getUserLabelByName("MyLabel");
      var threads = label.getThreads();

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

        for (var j=0; j<messages.length; j++)
        {
          if (messages[j].isUnread())
              {
                var msg = messages[j].getBody();      
                sheet.appendRow([msg]);
                messages[j].markRead();
              }
        }
          threads[i].removeLabel(label);
      }
    }
节将只获取带有标签但未被读取的消息,但它仍然返回整个线程中的所有消息。此外,它将线程中的所有消息标记为已读,这意味着当脚本为Location1的工作表运行时,如果Location1和Location2在线程中都有消息,它将所有消息标记为已读,当脚本为Location2的工作表运行时,它不会提取任何内容,因为所有消息都已标记为已读

很明显,现在我对谷歌应用程序的脚本和编码还很陌生。如果你能在你的答案中使用简短的词语和痛苦的详细解释,那会有很大帮助

谢谢

编辑:我试图使用
GmailApp.search()
,但仍然得到相同的结果。它从线程中的每封电子邮件中提取正文,并将它们全部标记为未读。目前的代码是这样的:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('NameOfSheet');

  var label = GmailApp.getUserLabelByName("Location1Label");
  var threads = GmailApp.search('label:"Location1Label" is:Unread');

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

    for (var j=0; j<messages.length; j++)
    {
      if (messages[j].isUnread())
          {
            var msg = messages[j].getBody();      
            sheet.appendRow([msg]);
            messages[j].markRead();
          }
    }
      threads[i].removeLabel(Location1Label);
  }
}
函数myFunction(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName('NameOfSheet');
var label=GmailApp.getUserLabelByName(“Location1Label”);
var threads=GmailApp.search('标签:“Location1Label”为:未读');
对于(变量i=0;i要求:
查找标签内未读的所有电子邮件并添加到工作表中


解决方案: 使用传递到
GmailApp.search()
的查询查找标签内的所有未读邮件

以下是脚本:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('NameOfSheet');

  var label = GmailApp.getUserLabelByName("Location1Label");
  var threads = GmailApp.search('label:"Location1Label" is:Unread');

  for (var i=0; i<threads.length; i++) 
  {
    var messages = GmailApp.getMessagesForThread(threads[i]);
    for (var j=0; j<messages.length; j++) 
    {
      if (messages[j].isUnread())
      {
        var msg = messages[j].getBody();      
        sheet.appendRow([msg]);
        messages[j].markRead();
      }
    }
    threads[i].removeLabel(label);
  }
}
函数myFunction(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName('NameOfSheet');
var label=GmailApp.getUserLabelByName(“Location1Label”);
var threads=GmailApp.search('标签:“Location1Label”为:未读');
对于(变量i=0;i要求:
查找标签内未读的所有电子邮件并添加到工作表中


解决方案: 使用传递到
GmailApp.search()
的查询查找标签内的所有未读邮件

以下是脚本:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('NameOfSheet');

  var label = GmailApp.getUserLabelByName("Location1Label");
  var threads = GmailApp.search('label:"Location1Label" is:Unread');

  for (var i=0; i<threads.length; i++) 
  {
    var messages = GmailApp.getMessagesForThread(threads[i]);
    for (var j=0; j<messages.length; j++) 
    {
      if (messages[j].isUnread())
      {
        var msg = messages[j].getBody();      
        sheet.appendRow([msg]);
        messages[j].markRead();
      }
    }
    threads[i].removeLabel(label);
  }
}
函数myFunction(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName('NameOfSheet');
var label=GmailApp.getUserLabelByName(“Location1Label”);
var threads=GmailApp.search('标签:“Location1Label”为:未读');

对于(var i=0;您是否尝试了上一个问题中关于使用
GmailApp.search()
)的建议?我尝试了。我可能会收到一条错误消息,上面写着“丢失”)在参数列表之后,当我添加一个参数列表时,它会说同样的事情,或者如果我让它运行,它似乎没有做任何事情。显然我做错了什么,但我无法找到它是什么…主要是因为当我从搜索中找到答案时,我无法理解他们在解释什么,因为我知道得不够。你能帮我一个忙吗将
GmailApp.search()
的示例添加到您的问题中,这样我们就可以对其进行故障排除了?我原以为会出现的版本是
var messages=GmailApp.search('label:“Location1Label”&&is:Unread');
但当我运行时,似乎什么都没有发生。如果我省略了“”,我会得到丢失的错误消息)参数列表后“您的问题是因为您在搜索字符串中使用了&。您应该像在Gmail顶部的搜索栏中一样构建它。
var messages=GmailApp.search('label:“Location1Label”是:unread');
您尝试过上一个问题中使用
GmailApp.search()的建议吗
?我试过了。我可能会收到一条错误消息,上面写着“失踪”)在参数列表之后,当我添加一个参数列表时,它会说同样的事情,或者如果我让它运行,它似乎没有做任何事情。显然我做错了什么,但我无法找到它是什么…主要是因为当我从搜索中找到答案时,我无法理解他们在解释什么,因为我知道得不够。你能帮我一个忙吗将
GmailApp.search()
的示例添加到您的问题中,这样我们就可以对其进行故障排除了?我原以为会出现的版本是
var messages=GmailApp.search('label:“Location1Label”&&is:Unread');
但是当我运行时,似乎什么都没有发生。如果我省略了“”,我会得到错误消息缺少)在参数列表之后“您的问题是因为您在搜索字符串中使用了&。您应该像在Gmail顶部的搜索栏中一样构建它。
var messages=GmailApp.search('label:“Location1Label”为:unread')
我想我知道你在做什么了,我怀疑我没有充分解释我的意图。我没有试图查找标签中所有未读并添加到工作表中的电子邮件。我试图查找所有具有特定标签的电子邮件并将其添加到工作表中,然后使用它们的已读或未读状态来确保程序何时运行增益它不会返回已添加到工作表中的结果。您的解决方案将返回所有unr