谷歌脚本GmailApp搜索标签或无用户标签



我正在尝试创建一个脚本,该脚本将允许我按标签名称或无用户标签搜索电子邮件及其附件。如果在 searchForLabels 中有多个条目,则该脚本不起作用。

function searchLabels(){
//if there is more than one entry here, the script does not work
var searchForLabels = 
[
'has:nouserlabels',
'label:Test1'
];
for (var l = 0; l < searchForLabels.length; l++) {
var threads = GmailApp.search('in:inbox newer_than:4d' + searchForLabels);  
var msgs = GmailApp.getMessagesForThreads(threads);
Logger.log(searchForLabels)
if (searchForLabels == 'has:nouserlabels'){    
for (var i = 0 ; i < msgs.length; i++) {
for (var j = 0; j < msgs[i].length; j++) {
var message = msgs[i][j];
var from = message.getFrom();
var subject = message.getSubject();
var getAttachments = message.getAttachments();
var body = message.getPlainBody();
var getTo = message.getTo();
Logger.log(subject)
for (var k = 0; k < getAttachments.length; k++) {
var attachment = getAttachments[k];
var content = attachment.getContentType();
//rest of my code
} 
}      
}
}
}
}

我对你的代码做了两个小改动。测试后,它会按照您的要求工作。

第一个在var threads = GmailApp.search('in:inbox newer_than:4d ' + searchForLabels[l]);线上。我在searchForLabels数组中使用了l迭代器。我使用它是因为,阅读该行的上下文,它似乎很合适。此更改将循环访问标记。如果这不是你的初衷,请原谅我。

第二个更改是脚本工作所必需的。我注释掉了if (searchForLabels == 'has:nouserlabels') {,因为如果searchForLabels数组有多个元素,则永远不会true。这是您检测到的错误。请注意通讯员}是如何被注释掉的。

这是脚本的最终版本和工作版本:

function searchLabels() {
//if there is more than one entry here, the script does not work
var searchForLabels = [
'has:nouserlabels',
'label:Test1'
];
for (var l = 0; l < searchForLabels.length; l++) {
var threads = GmailApp.search('in:inbox newer_than:4d ' + searchForLabels[l]);
var msgs = GmailApp.getMessagesForThreads(threads);
Logger.log(searchForLabels)
//if (searchForLabels == 'has:nouserlabels') {
for (var i = 0; i < msgs.length; i++) {
for (var j = 0; j < msgs[i].length; j++) {
var message = msgs[i][j];
var from = message.getFrom();
var subject = message.getSubject();
var getAttachments = message.getAttachments();
var body = message.getPlainBody();
var getTo = message.getTo();
Logger.log(subject)
for (var k = 0; k < getAttachments.length; k++) {
var attachment = getAttachments[k];
var content = attachment.getContentType();
//rest of my code
}
}
}
//}
}
}

我想补充一点,您可以使用应用程序脚本上的Gmail API以简单的方式完成您的请求。特别是,您可以使用 Users.messages LIST 列出带有所选标签的所有邮件。在那里,您可以看到一个示例(单击JavaScript(,其中函数已准备好进行搜索。要启用此 API,您应遵循激活高级服务的指南。不要犹豫,要求更多的澄清或任何问题。

function searchLabels() {
var searchForLabels = [
'has:nouserlabels',
'label:Test1'
];
for (var l = 0; l < searchForLabels.length; l++) {
var threads = GmailApp.search('in:inbox newer_than:4d ' + searchForLabels[l]);
var msgs = GmailApp.getMessagesForThreads(threads);
Logger.log(searchForLabels)
if (searchForLabels[l] == 'has:nouserlabels') { //limits emails to those without tag
//if (searchForLabels[l] == 'label:Test1') { //or to those with tag
for (var i = 0; i < msgs.length; i++) {
for (var j = 0; j < msgs[i].length; j++) {
var message = msgs[i][j];
var from = message.getFrom();
var subject = message.getSubject();
var getAttachments = message.getAttachments();
var body = message.getPlainBody();
var getTo = message.getTo();
Logger.log(subject)
for (var k = 0; k < getAttachments.length; k++) {
var attachment = getAttachments[k];
var content = attachment.getContentType();
//rest of my code
}
}
}
}
}
}

最新更新