每天我都会收到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的工作表中运行,则当Location1和Location2在线程中都有消息时,它将所有消息都标记为已读,而脚本在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);
}
}
答案 0 :(得分:0)
在标签内查找所有未读的电子邮件并将其添加到工作表中。
使用传递给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);
}
}
现在,我们使用GmailApp.search()
查找所有电子邮件,然后循环遍历结果数组并将每个对象传递给GmailApp.getMessagesForThread()
。
除了您的removeLabel()
之外,其余代码均未更改,因为它没有查看脚本前面定义的变量。