问题描述
我想以相反的顺序为电子邮件加星标(首先是较旧的电子邮件),但这在 Gmail 中是不可能的。所以我想写一个 Apps 脚本。
我认为的逻辑是:
- 使用 GmailLabel 获取所有已“加星标”为标签的线程
- 循环所有消息以获取 GmailMessage.getDate() 并将它们放入有序数组中
- 向邮件添加新标签“GTD-Todo”...但我不确定 Gmail 是否会在按“按日期”或“上次添加到标签”排序的标签中显示邮件
有人有不同的方法可以帮助我吗? 谢谢
解决方法
这是我成功更改线程顺序的方法。
请注意: => addLabel() 到线程/消息不会不改变线程的顺序 => createDraftReply() *确实改变了线程的顺序
因此,如果您想使用标签更改线程的顺序,我发现的唯一调整是在数组中对 ID 进行排序,然后循环遍历线程并调用 createDraftReply()。 这将导致线程按您想要的顺序排列。 很遗憾,您还会在每个话题的末尾看到一条消息草稿。
有更好的想法吗? 这是我的代码:
// Put starred threads into a label ordered "older first"
function ordinaGTD() {
Logger.log("# Starred threads: " + GmailApp.getStarredThreads().length);
var speciali= GmailApp.getStarredThreads(); // Get all starred threads
var etichetta= GmailApp.createLabel("GTD"); // This label is the one I want messages ordered into
// remove label to all current messages,just to clean things up
var da_rimuovere=etichetta.getThreads();
for(var k=0;k<da_rimuovere.length;k++) da_rimuovere[k].removeLabel(etichetta);
// Cicle through all starred and add IDs to an array using push()
var ordine=[];
for (var i=0; i < speciali.length; i++){
// Prende la data del primo messaggio
var quando = speciali[i].getLastMessageDate();
// Crea un vettore "riga"
// Mette la riga in tabella
ordine.push(speciali[i].getId());
}
// Add a draft reply in each thread,the last reply is "more recent" so it will be shown first
// Crea un messaggio Draft per averli in ordine dal più recente
for(j=0;j<ordine.length;j++){
Logger.log(ordine[j]);
var t = GmailApp.getThreadById(ordine[j]);
var messaggi=t.getMessages();
Logger.log("Data primo MSG: "+messaggi[0].getDate().getTime());
// In case there is already a draft,remove it
var ultimo=messaggi[messaggi.length-1];
if (ultimo.isDraft() && ultimo.getBody().indexOf("[BOZZA AD USO INTERNO:")!=null) {
ultimo.moveToTrash();
}
// Set the text in the draft adding a counter to check the order :-D
t.createDraftReply("[BOZZA AD USO INTERNO: "+j+"]");
// Add to the label
t.addLabel(etichetta);
//break;
}
}