好的,我认为网络Gmail很棘手。我运行了一个谷歌应用程序脚本,部分添加了我的"待办事项"标记到我手动加注的任何线程,然后存档并取消它。下面是一个片段。我很感激任何帮助。
运行脚本后,线程获取标签并取消星标,除了网络Gmail中的主题/消息旁边的星形图标仍然显示为已选中。如果我转到星标消息标签/文件夹,则不显示任何内容。如果我立即重新运行脚本,它不会找到任何加星标的线程。这似乎表明脚本工作正常。问题似乎是网络Gmail仍然希望将其显示为已加星标,即使它不是。 Gmail Android应用不会显示应用于该主题的明星。图片更值得......
脚本运行后我的收件箱是什么样的。注意明星:
然而没有加星标的消息:
function addStarred2ToDo() {
var threads = GmailApp.search('is:starred');
for (var h in threads) {
var messages = threads[h].getMessages();
for (var i in messages) {
if (messages[i].isStarred()) {
messages[i].unstar();
}
}
}
}
编辑: 我也尝试了这一点,并没有产生预期的结果。
function thisOne() {
var threads = GmailApp.search('is:starred');
for (var h in threads) {
var messages = threads[h].getMessages();
for (var i in messages) {
if (messages[i].isStarred()) {
messages[i].unstar().refresh();
}
}
}
}
function andThisOne() {
var threads = GmailApp.search('is:starred');
var toUnstar = [];
threads.forEach(function (thread) {
thread.getMessages().forEach(function (message) {
if (message.isStarred()) {
toUnstar.push(message);
}
});
});
GmailApp.unstarMessages(toUnstar);
}
答案 0 :(得分:1)
如果你刷新gmail并将鼠标悬停在星号上,你会看到弹出窗口显示它没有被盯着。此外,当您从gmail中选择星标时,这似乎是一个问题,因为我的过滤器设置的星星在我的脚本解除它们时会正常工作。
答案 1 :(得分:0)
导致此显示问题的原因是您在致电refresh()
后致电unstar()
时强迫Gmail不通知此邮件来更新邮件。
GmailMessage#refresh()
的每个文档:
从Gmail重新加载此消息和关联状态(如果标签,读取状态等已更改,则非常有用)。
messages[i].unstar().refresh();
应足以通知Gmail新的已加星标状态。
或者,在配额使用方面,修改邮件的批量调用将更有效:
var toUnstar = [];
threads.forEach(function (thread) {
thread.getMessages().forEach(function (message) {
if (message.isStarred()) {
toUnstar.push(message);
...
}
});
});
GmailApp.unstarMessages(toUnstar);
在我的示例中,我避免假设使用for .. in..迭代数组是安全的,并使用更具表现力的Array.forEach()
来表示代码是我们想要应用于每个线程和每条消息的内容在所述主题中。
GmailApp.unstarMessages
()上的文档:
从这些消息中删除星标并强制刷新消息。
答案 2 :(得分:0)
我遇到了类似的问题。我启用了一个超级巨星,绿色检查。我手动设置它们。
我的脚本在搜索中使用“l:^ ss_cg”查找相关的主题。它找到已加星标的电子邮件,在某处发送电子邮件的副本,然后执行unstar。
之后,在网络Gmail中,如果我再次搜索相同的消息,它会在视觉上显示绿色星星,但如果我将鼠标悬停在星形图标上,则会显示“未加星标”。
但是,如果我再次运行脚本,则会使用搜索找到该线程。但是,它不会发送该电子邮件的另一个副本,因为我在发送特定电子邮件的副本之前检查了“.isStarred()”。通过在开始查看单个电子邮件之前向线程添加.hasStarredEmails()检查,我还能够减少双重检查的线程数。
在网络界面中搜索has:green-check仅显示应该发送的电子邮件。
我认为.unStar()有些东西不能正常工作。
我曾尝试通过删除^ ss_cg标签来尝试删除线程级别的星号,但这不起作用,因为无法获取GMailLabel对象发送到函数。
答案 3 :(得分:0)
仍然存在 Gmail 网络应用显示星号的相同问题。但刚刚有了有趣的发现。
假设
var threads = GmailApp.getStarredThreads()
var thread = threads[0]
var message = thread.getMessages()[0]
GmailApp.unstarMessage(message)
会立即给出以下结果:
var isMessageStarred = message.isStarred()
真
var isThreadStarred = thread.hasStarredMessages()
true
GmailApp.unstarMessage(message).refreshMessage(message)
会立即给出以下结果:
var isMessageStarred = message.isStarred()
假
var isThreadStarred = thread.hasStarredMessages()
true
而 GmailApp.unstarMessage(message).refreshMessage(message).refreshThread(thread)
会立即给出以下结果:
var isMessageStarred = message.isStarred()
假
var isThreadStarred = thread.hasStarredMessages()
假