wea*_*ker 6 gmail google-apps-script
好吧,我认为网络版 Gmail 很奇怪。我运行一个 Google 应用程序脚本,该脚本部分将我的“待办事项”标签添加到我手动加星标的任何线程中,然后对其进行存档和取消加星标。下面是一个片段。我将不胜感激任何帮助。
运行脚本后,线程获得标签并取消加星标,但网页版 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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我也尝试过这个,但都没有产生预期的结果。
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);
}
Run Code Online (Sandbox Code Playgroud)
refresh()导致此显示问题的原因是您在调用 后没有强制 Gmail 通过调用 来更新邮件unstar()。
从 Gmail 重新加载此邮件和关联状态(在标签、阅读状态等发生更改时很有用)。
messages[i].unstar().refresh();
Run Code Online (Sandbox Code Playgroud)
应足以通知 Gmail 新的加星标状态。
或者,批量调用来修改消息在配额使用方面会更有效:
var toUnstar = [];
threads.forEach(function (thread) {
thread.getMessages().forEach(function (message) {
if (message.isStarred()) {
toUnstar.push(message);
...
}
});
});
GmailApp.unstarMessages(toUnstar);
Run Code Online (Sandbox Code Playgroud)
在我的示例中,我避免了这样的假设:使用for .. in..迭代数组是安全的,并使用更具表现力的内容Array.forEach()来表明我们希望将代码应用于每个线程以及该线程中的每个消息。
GmailApp.unstarMessages关于()的文档:
从这些消息中删除星星并强制刷新消息。
| 归档时间: |
|
| 查看次数: |
2282 次 |
| 最近记录: |