Ich habe so etwas gehackt. Ich habe es wahrscheinlich auf etwas gestützt, das jemand anderes geschrieben hat, aber es ist so lange her, dass ich mich nicht mehr erinnere.
Es hat seitdem zuverlässig weggetuckert. So funktioniert das:
Im Allgemeinen wird nach Nachrichten mit bestimmten Tags gesucht und dieses Tag dann durch ein anderes ersetzt und anschließend archiviert.
Insbesondere werden Nachrichten mit Posteingangsfiltern versehen, um anzuzeigen, wie sie "abgelaufen" sind. Im folgenden Beispiel basiert dies darauf, wie alt sie sind, und die Bezeichnung wird aufgerufen Bulk/Expires/[Daily|Weekly|Monthly]
. (Hinweis: Dies ist ein verschachteltes Tag, aber sie müssen nicht verschachtelt sein. Ich möchte sie nur so organisieren.) Jeden Tag werden einige Google Apps-Skripte ausgeführt, um zu überprüfen, ob Threads in diesen Labels einer bestimmten Bedingung entsprechen, im Allgemeinen einem Datum. Dieses Tag wird dann durch ein anderes Tag ( Bulk/Expired
unten genannt) ersetzt und archiviert. Sie können die Nachricht auch einfach löschen lassen.
Dies ist Code (mit zusätzlichen Kommentaren), der Nachrichten bereinigt, die älter als ein Tag sind. Es ist so eingerichtet, dass es jeden Tag um 4 Uhr morgens ausgelöst wird:
function cleanUpDaily() {
// Enter # of days before messages are archived
var delayDays = 1
// make an empty Date() object
var maxDate = new Date();
// Set that date object ('maxDate')to the current data minus 'delayDays'.
// In this case it's a date 1 day before the time when this runs.
maxDate.setDate(maxDate.getDate()-delayDays);
// this is the label that finds messages eligible for this filter
var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Daily");
// this is the new label so I know a message has already been "Expired"
var newLabel = GmailApp.getUserLabelByName("Bulk/Expired");
// Get the message threads which might need to be expired.
var threads = currLabel.getThreads();
// Iterate over those threads and check if they need to be expired
for (var i = 0; i < threads.length; i++) {
// You can put whatever kinds of conditions in here,
// but this is just going to check if they were recieved before
// 'maxDate' which here is 1 day before runtime.
if (threads[i].getLastMessageDate()<maxDate)
{
// If they're old, archive them
threads[i].moveToArchive();
// Remove the old label, they won't need to be expired again
// This isn't required, but it will make it slow, and Google will
// time-out things that take too long, in my experaince it will
// become slow and start timing out if there are more than a few
// dozen threads to process, YMMV.
threads[i].removeLabel(currLabel);
// Label the thread with a new label indicating it's gone through this
// process. Also not strictly necessary, but it's useful if you'd like
// to do some more processing on them in the future.
threads[i].addLabel(newLabel);
}
}
}
Hier ist der Code dafür für Dinge, die in einer Woche oder einem Monat ablaufen sollten. Sie richten Trigger ein, um diese Funktionen entweder wöchentlich oder monatlich auszuführen.
function cleanUpWeekly() {
var delayDays = 7 // Enter # of days before messages are moved to archive
var maxDate = new Date();
maxDate.setDate(maxDate.getDate()-delayDays);
var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Weekly"); // this is the label that finds messages eligible for this filter
var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
var threads = currLabel.getThreads();
for (var i = 0; i < threads.length; i++) {
if (threads[i].getLastMessageDate()<maxDate)
{
threads[i].moveToArchive();
threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
threads[i].addLabel(newLabel);
}
}
}
function cleanUpMonthly() {
var delayDays = 30 // Enter # of days before messages are moved to archive
var maxDate = new Date();
maxDate.setDate(maxDate.getDate()-delayDays);
var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Monthly"); // this is the label that finds messages eligible for this filter
var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
var threads = currLabel.getThreads();
for (var i = 0; i < threads.length; i++) {
if (threads[i].getLastMessageDate()<maxDate)
{
threads[i].moveToArchive();
threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
threads[i].addLabel(newLabel);
}
}
}
Im Moment arbeite ich an einer, die die Bulk/Expired
Nachrichten aufnimmt und wenn sie ein Purge
Tag haben, werden sie dauerhaft gelöscht. Ich bin nicht geneigt, jemals eine E-Mail zu löschen (verrückt), aber viele archivierte Mailinglisten-Dinge verschmutzen die Suchergebnisse. Dieser Ärger hat begonnen, meine Tendenzen zum digitalen Horten zu überwältigen. Die einzige Änderung besteht darin, dass die for
Schleife prüft, ob eine Nachricht das Tag "Löschen" enthält. Dies ist nicht trivial, da die Beschriftungen eines bestimmten Threads als Array zurückgegeben werden. Daher muss ich das Array überprüfen, das einige Codezeilen hinzufügt. Es sei denn, ich finde einen schlaueren Weg.
Ich verwende dies hauptsächlich, um Newsletter mit dem Google-Posteingang zu verwalten. Ich habe ein Nachrichtenpaket für das Tag "Bulk / Expires / Daily" eingerichtet, und der Filter stellt sicher, dass nur der heutige Newsletter vorhanden ist. Ob ich es dann an einem bestimmten Tag lese oder nicht, das Neueste ist da. Es ist ein bisschen so, als würde man den Posteingang in einen RSS-Reader hacken. Ich mache das Gleiche für regelmäßige Newsletter / Massenmailings, die wöchentlich oder monatlich erscheinen. Im Allgemeinen verfallen sie, wenn ihr Alter ihre Relevanz aufhebt.