0

对不起,我不是程序员,

我正在使用这个 gmail 应用程序脚本 (CLEANINBOX),它在 roder 中工作得很好,可以保持我的收件箱干净。由于我需要同时使用收件箱应用程序(移动)和 GMAIL 应用程序(桌面),我需要实现此脚本以避免收件箱中的 PINNED 消息被归档。

我在 IF 序列中插入了一个条件,但它不起作用经过一番挣扎后,我意识到(如果我错了,请纠正我)以下代码不起作用,因为 !thread.getLabels()=='PINNED') 不是布尔值

谁能指出我正确的代码?

function cleanInbox() {
    var threads = GmailApp.getInboxThreads();
    for (var i = 0; i < threads.length; i++) {
        var thread=threads[i];
        if (!thread.hasStarredMessages() && !thread.isUnread() && !thread.getLabels()=='PINNED') {
            GmailApp.moveThreadToArchive(threads[i]);
        }
    }
}
4

2 回答 2

1

好的,这比预期的要容易得多......

我只需要缩小要使用的线程数,而我只是排除了那些带有“固定”标签的线程

var threads = GmailApp.search('in:inbox -label:pinned')

解决了

感谢您的意见

于 2017-06-16T08:35:21.773 回答
0

该语句!thread.getLabels()=='PINNED'是布尔值(因为操作数 == 输出真或假)。我认为你的问题是它thread.getLabels()不返回一个字符串,因此它永远不会等于'PINNED'

编辑:

getLabels()方法返回值为 GmailLabel[] 。您可以通过添加以下代码遍历标签并检查您的条件:

for (var i = 0; i < threads.length; i++) {
var thread=threads[i];
if (!thread.hasStarredMessages() && !thread.isUnread()) {
    var labels = thread.getLabels();
    var isPinned = false;        
    for (var j = 0; i < labels.length; i++) {
       if (labels[j].getName() == "PINNED"){
           isPinned = true;
           break;
       }      
    if (!isPinned){
        GmailApp.moveThreadToArchive(threads[i]);
    }
}
于 2017-06-14T11:15:54.423 回答