Tôi có một cái gì đó như thế này bị hack lên. Tôi có thể dựa trên một cái gì đó mà người khác đã viết, nhưng lâu lắm rồi tôi không nhớ.
Nó đã chugg đi đáng tin cậy kể từ đó. Đây là cách nó hoạt động:
Nói chung, nó tìm kiếm các tin nhắn với các thẻ nhất định và sau đó thay thế thẻ đó bằng một thẻ khác và sau đó lưu trữ chúng.
Cụ thể , tin nhắn được gắn thẻ với các bộ lọc hộp thư đến để cho biết chúng sẽ "hết hạn" như thế nào. Trong ví dụ dưới đây, điều này dựa trên tuổi của chúng và nhãn được gọi Bulk/Expires/[Daily|Weekly|Monthly]
. (Lưu ý: đây là thẻ lồng nhau, nhưng chúng không cần được lồng, tôi chỉ muốn giữ chúng có tổ chức như thế này). Mỗi ngày, một số Tập lệnh Google Apps sẽ chạy để kiểm tra xem các chuỗi trong các nhãn đó có khớp với một số điều kiện hay không, thường là một ngày. Sau đó, nó sẽ thay thế thẻ đó bằng một thẻ khác (được gọi Bulk/Expired
bên dưới) và lưu trữ nó. Bạn cũng có thể có nó xóa tin nhắn.
Đây là mã (có thêm nhận xét) sẽ dọn sạch thư hơn một ngày. Nó được thiết lập để kích hoạt mỗi ngày vào lúc 4 giờ sáng:
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);
}
}
}
Đây là mã để làm điều này cho những thứ sẽ hết hạn trong một tuần hoặc một tháng, bạn thiết lập các kích hoạt để chạy các chức năng này hàng tuần hoặc hàng tháng.
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);
}
}
}
Ngay bây giờ tôi đang làm việc trên một ứng dụng sẽ nhận các Bulk/Expired
tin nhắn và nếu chúng có Purge
thẻ thì nó sẽ xóa chúng vĩnh viễn. Tôi không thích xóa một email (crazy), nhưng rất nhiều thứ trong danh sách gửi thư được lưu trữ có xu hướng gây ô nhiễm kết quả tìm kiếm. Sự phiền toái này đã bắt đầu lấn át xu hướng tích trữ kỹ thuật số của tôi. Thay đổi duy nhất là for
vòng lặp kiểm tra xem tin nhắn có thẻ 'Thanh lọc' hay không. Điều này không phải là nhỏ, bởi vì các nhãn của một luồng đã cho đã được trả về dưới dạng một mảng, và vì vậy tôi phải kiểm tra mảng đó sẽ thêm một vài dòng mã. Trừ khi tôi tìm thấy một số cách mượt mà.
Tôi chủ yếu sử dụng điều này để quản lý các bản tin với Hộp thư đến của Google. Tôi thiết lập gói tin nhắn cho thẻ `Hàng loạt / Hết hạn / Hàng ngày 'và bộ lọc đảm bảo chỉ có bản tin ngày hôm nay. Sau đó, cho dù tôi có đọc nó vào một ngày nhất định hay không, mới nhất là ở đó. Nó giống như hack Hộp thư đến vào một trình đọc RSS. Tôi làm điều tương tự cho các bản tin / thư hàng loạt được phát hành hàng tuần hoặc hàng tháng. Nói chung, tôi hết hạn khi tuổi của họ loại bỏ sự liên quan của họ.