在工作中,我们有一个每4小时运行一次的Google脚本代码,并检查每个人的@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标签,我怎么才能移动电子邮件?
答案 0 :(得分:2)
这是我的尝试:
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 (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行。我可以单步执行到下一行代码,方法是点击步骤图标。将鼠标悬停在图标上可以弹出上下文帮助。
我进一步逐行走,并检索放入变量&#34; ThisParticularLabel&#34;的标签。您可以在窗口中看到它的值为 @Josh 。
我逐步完成了代码,并在主 for循环运行一次后结束。我也没有调试它自己运行该代码,它运行于:
执行成功[0.246秒总运行时间]
您需要调试代码,查看它在每一行上的作用,并了解每个变量对值的影响,以及条件语句的工作方式。
答案 1 :(得分:0)
脚本不会以两个for循环结尾都使用变量i,因为内部for循环会将i连续设置为0,并且不会递增。将内部循环切换到j变量,脚本将完成。