在工作中,我们有一个每4小时运行一次的谷歌脚本代码,并检查每个人的@folders是否有未读邮件.如果找到未读邮件,则将其移至INBOX并使用@@ UNREAD标记.
我需要的是一种方法,让脚本检查它是否已经有@@ UNREAD标签,在这种情况下不会移动到收件箱.
这是代码
function process_unread() {
//Define user label
var label = GmailApp.getUserLabelByName("@Josh");
//Define unread label
var unreadlabel = GmailApp.getUserLabelByName("@@UNREAD");
if (label) {
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var thread = threads[i];
if (thread.isUnread()) {
//Remove label
thread.addLabel(unreadlabel);
thread.moveToInbox();
}
}
}
}
如果他们没有@@ UNREAD标签,我怎么能只移动电子邮件?
最佳答案 这是我的尝试:
function process_unread() {
//Define user label
var label = GmailApp.getUserLabelByName("@Josh");
//Define unread label
var unreadlabel = GmailApp.getUserLabelByName("@@UNREAD");
if (label) {
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var thread = threads[i];
var labels = thread.getLabels();
var doesThisThreadHaveTheLabel = false;
for (var i = 0; i < labels.length; i++) {
var thisParticularLabel = labels[i].getName();
Logger.log(labels[i].getName());
if (thisParticularLabel === "@@UNREAD") {
var doesThisThreadHaveTheLabel = true;
};
}
if (thread.isUnread() && doesThisThreadHaveTheLabel === false) {
//Remove label
thread.addLabel(unreadlabel);
thread.moveToInbox();
}
}
}
}
在将线程移动到收件箱之前,您需要确保它没有标签.所以在If检查中添加另一个条件.
if (thread.isUnread() && doesThisThreadHaveTheLabel === false) {
我创建了一个变量:doesThisThreadHaveTheLabel,它将具有true或false值.在每个for循环之前,它的默认设置为false.
var doesThisThreadHaveTheLabel = false;
for (var i = 0; i < labels.length; i++) {
您可以调试代码来检查它:
在上图中,您会看到菜单中的错误图标.在单击之前,首先单击错误右侧的下拉菜单,然后选择要运行的函数的名称.另外,在代码中添加断点.在该图片中,您将在代码编辑器中的行号中看到一个红点.这就是代码停止的地方.
我将标签@josh添加到我帐户中的一封电子邮件中,因此变量标签中有一个对象.但是,我没有任何带有@@ UNREAD标签的电子邮件,因此您会注意到变量列表中的变量unreadlabel的值为null.
在该图片中,代码暂停在第269行.我可以通过单击图标中的步骤进入下一行代码.将鼠标悬停在图标上可以弹出上下文帮助.
我进一步逐行,并检索放入变量“ThisParticularLabel”的标签.您可以在窗口中看到它的值为@Josh.
我逐步完成了代码,它在主循环运行一次后结束.我也没有调试它自己运行该代码,它运行于:
执行成功[0.246秒总运行时间]
您需要调试代码,查看它在每一行上的作用,并了解每个变量对于某个值的作用,以及条件语句的工作方式.