【发布时间】:2019-11-03 16:47:21
【问题描述】:
每天我都会收到 0-20 封基本上是这样的电子邮件:
姓名:名字姓氏
电话号码:555-867-5309
电子邮件地址:Fake@email.com
位置:NameOfPreferedBranch
请求:ThingPersonWants
我正在尝试根据列出的位置将这些电子邮件的正文发送到不同的 Google 表格。因此,如果填写表格的人说 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);
}
}
我希望通过标签获取线程和
if (messages[j].isUnread())
部分只会让我得到带有标签且尚未阅读的消息,但它仍会返回整个线程中的所有消息。此外,它将线程中的所有消息都标记为已读,这意味着如果 Location1 和 Location2 在线程中都有一条消息,当脚本针对 Location1 的工作表运行时,它会将所有消息标记为已读,并且当脚本针对 Location2 的工作表运行时它不会提取任何内容,因为所有消息都已标记为已读。
现在可能很明显,我对 Google Apps 脚本和一般编码非常陌生。如果你能在你的答案中使用简短的词和痛苦的详细解释,那将有很大帮助。
谢谢。
编辑:我尝试使用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);
}
}
【问题讨论】:
-
您是否尝试过上一个问题中使用
GmailApp.search()的建议? -
我试过了。我会在参数列表之后收到一条错误消息,上面写着“缺少)”,当我添加一个时它会说同样的事情,或者如果我让它运行它似乎没有做任何事情。显然我做错了什么,但我无法追踪它是什么......主要是因为当我通过搜索找到答案时,我无法理解他们在解释什么,因为我知道的不够多。
-
能否将
GmailApp.search()的示例添加到您的问题中,以便我们解决问题? -
我认为可以让我到达那里的版本是
var messages = GmailApp.search('label:"Location1Label" && is:Unread');,但是当我运行时似乎什么也没发生。如果我省略了'',我会在参数列表后收到错误消息“Missing )” -
您的问题是因为您在搜索字符串中使用了 &&。您应该像在 Gmail 顶部的搜索栏中那样构建它。
var messages = GmailApp.search('label:"Location1Label" is:unread');
标签: google-apps-script google-sheets gmail