6 dự án Google Apps Script để nâng cao trải nghiệm Gmail của bạn

Một lần nữa, tôi ở đây để nói về năng suất và tính tự động hóa trong Gmail. Lần này, chúng tôi sẽ sử dụng chế độ chuyên môn hoàn chỉnh và sẽ sử dụng Google Apps Script để cải thiện trải nghiệm Gmail của bạn.
Gmail có nhiều cài đặt tích hợp mà bạn có thể điều chỉnh để tự động hóa các tác vụ và tăng năng suất. Tuy nhiên, nó có những hạn chế và nhiều tính năng không cung cấp đủ tùy chọn tùy chỉnh. Đây là nơi bạn có thể tự mình giải quyết vấn đề bằng cách sử dụng Google Apps Script.
Với nó, bạn có thể tạo các tập lệnh tùy chỉnh có thể thực hiện các tác vụ mà Gmail vốn không thể thực hiện được. Không chỉ vậy, bạn có thể đặt trình kích hoạt dựa trên thời gian để tự động hóa các tập lệnh này.
Để giúp bạn bắt đầu, tôi liệt kê một số tập lệnh hữu ích chắc chắn sẽ nâng cao trải nghiệm Gmail của bạn. Tôi đã đảm bảo rằng mỗi tập lệnh sẽ tự động giải quyết các vấn đề thường gặp, chẳng hạn như trùng lặp hoặc tự động tạo thư mục mới. Do đó, một số tập lệnh có thể dài hơn một chút so với mục đích dự định của chúng.
Mục lục
Tạo tập lệnh trong tập lệnh Google Apps
Trước khi bắt đầu áp dụng và tùy chỉnh các tập lệnh này, bạn cần biết cách tạo và chạy tập lệnh trong Google Apps Script. Đây là cách thực hiện:
Mở Google Apps Script và nhấp vào nút Dự án mới ở bảng điều khiển bên trái.
Ở đây bạn cần xóa tất cả mã đã viết và sao chép/dán tập lệnh mà tôi sẽ cung cấp. Sau đó, nhấp vào nút Lưu để lưu tập lệnh.
Để thực thi tập lệnh, nhấp vào nút Chạy ngay bên cạnh Lưu. Bạn sẽ được yêu cầu cấp quyền và sẽ có cảnh báo rằng tập lệnh chưa được xác minh. Bạn có thể bỏ qua cảnh báo và cấp quyền vì tập lệnh này dành cho mục đích sử dụng cá nhân và Google chưa xem xét tập lệnh đó.
Thế là xong, script sẽ chạy và nó sẽ hiển thị trong nhật ký thực thi cho dù nó đã được thực thi thành công hay chưa.
Thiết lập trình kích hoạt
Nhiều tập lệnh trong số này hoạt động tốt nhất khi chúng được kích hoạt tự động. Rất may, Google Apps Script cũng có một phần để tạo trình kích hoạt dựa trên thời gian cho từng tập lệnh để chúng tự động thực thi.
Tuy nhiên, trước khi tôi nói với bạn về cách tạo trình kích hoạt, bạn nên biết rằng Google Apps Script có hạn ngạch giới hạn dựa trên việc bạn có đăng ký hay không Gói Google Workspace hay không. Nếu bạn có quá nhiều tập lệnh chạy cùng một lúc và quá thường xuyên thì bạn có thể đạt đến hạn ngạch hàng ngày và khiến dịch vụ tạm dừng hoạt động.
Mặc dù bạn có tùy chọn thực thi tập lệnh mỗi phút, nhưng điều đó sẽ tiêu tốn rất nhiều hạn ngạch hàng ngày của bạn. Đảm bảo rằng bạn chỉ đặt bộ hẹn giờ để hoàn thành công việc một cách đáng tin cậy.
Để tạo trình kích hoạt, hãy nhấp vào Trình kích hoạt ở bảng điều khiển bên trái trong khi tập lệnh đang mở, sau đó nhấp vào nút Thêm trình kích hoạt.
Tại đây bạn có thể chọn bộ hẹn giờ tính bằng phút đến vài tháng và khoảng thời gian. Bạn cũng có thể chọn ngày và giờ cố định để chỉ chạy tập lệnh một lần tại thời điểm cụ thể đó. Khi tất cả đã được chọn, hãy nhấp vào Lưu để tạo trình kích hoạt.
Nếu bạn chưa được cấp quyền chạy tập lệnh như tôi đã nói trước đây thì bạn sẽ được yêu cầu cấp quyền trước khi tạo trình kích hoạt.
Dựa trên lựa chọn của bạn, trình kích hoạt sẽ chạy liên tục. Nếu nó gặp phải bất kỳ vấn đề nào, nó sẽ thông báo cho bạn cùng với lỗi đã xảy ra.
Bây giờ, hãy đi sâu vào một số ví dụ thực tế về cách bạn có thể sử dụng Google Apps Script để tự động hóa các tác vụ Gmail của mình.
Gửi email định kỳ
function sendRecurringEmail() { var recipient = "[email protected]"; var subject = "Your subject here"; var message = "Your custom message here"; GmailApp.sendEmail(recipient, subject, message); }
Gmail cho phép bạn lên lịch gửi email nhưng không cho phép bạn gửi email định kỳ. Cho dù bạn muốn nhắc ai đó điều gì đó hay bạn muốn đảm bảo email của mình không bị bỏ qua. Tập lệnh đơn giản này sẽ gửi email đến địa chỉ được cung cấp với chủ đề và thông báo bạn cung cấp. Sau đó, bạn có thể thiết lập trình kích hoạt định kỳ từ tùy chọn Kích hoạt.
Trong tập lệnh, hãy chỉnh sửa phần người nhận, chủ đề và tin nhắn với các chi tiết thực tế. Đảm bảo các trích dẫn xung quanh văn bản mẫu được giữ nguyên. Ví dụ: chủ đề sẽ trông như thế này:
var subject = "Important Reminder";
Vì trình kích hoạt có giới hạn tối đa là một tháng nên tin nhắn định kỳ phải được gửi mỗi tháng một lần. Thật không may, điều này có nghĩa là bạn không thể sử dụng nó để gửi lời chúc cho những dịp diễn ra hàng năm.
Lọc email có liên kết đến nhãn
function processUnreadEmailsWithLinks() { var labelName="Emails with Links"; var label = GmailApp.getUserLabelByName(labelName); if (!label) { label = GmailApp.createLabel(labelName); } var threads = GmailApp.search('is:unread'); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var message = messages[j]; var body = message.getBody(); if (bodyContainsLinks(body)) { label.addToThread(threads[i]); } } } } function bodyContainsLinks(body) { var regex = /https?:\/\/[^\s<>"']+/g; return regex.test(body); }
Email có liên kết trong nội dung thường quan trọng hơn. Cho dù bạn nhận được báo cáo từ đồng nghiệp hay bạn đã đăng ký nhận bản tin gửi các tài nguyên cụ thể, việc phân loại email bằng các liên kết có thể rất hữu ích.
Tập lệnh này xem xét tất cả các email chưa đọc trong tài khoản Gmail của bạn và phân tách những email có liên kết trong nội dung email thành một nhãn mới có tên “Email có liên kết”. Theo mặc định, nó sẽ tìm email ở mọi nơi trong Gmail nhưng bạn có thể thu hẹp tìm kiếm bằng cách chỉnh sửa var thread = GmailApp.search(‘is:unread’); đường kẻ. Dưới đây là một số cách bạn có thể chỉnh sửa nó:
Chỉ tìm kiếm trong Hộp thư đến: var thread = GmailApp.search(‘in:inbox is:unread’);
Tìm kiếm trong các nhãn khác: var thread = GmailApp.search(‘in:inbox is:unread OR in:promotions is:unread OR in:important is:unread’);
Tìm kiếm tất cả các email đã đọc/chưa đọc trong Inbox: var thread = GmailApp.search(‘in:inbox’);
Tìm kiếm email từ một người gửi cụ thể: var thread = GmailApp.search(‘from:[email protected]‘);
Những ví dụ này sẽ cung cấp cho bạn ý tưởng về cách bạn có thể chỉnh sửa tập lệnh để thu hẹp các email có liên kết. Ngoài ra, tôi tin rằng việc thiết lập trình kích hoạt hàng ngày sẽ là quá đủ cho những loại email như vậy.
Tự động xóa email cũ
function deleteOldEmails() { var threads = GmailApp.search('older_than:30d'); for (var i = 0; i < threads.length; i++) { threads[i].moveToTrash(); } }
Nếu không muốn giữ lại các email cũ, bạn có thể sử dụng tập lệnh này để xóa các email cũ hơn một khoảng thời gian cụ thể. Đoạn script ở đây sẽ tìm kiếm tất cả các email trong Gmail cũ hơn 30 ngày và gửi chúng vào Thùng rác. Bạn có thể chỉnh sửa phần ‘older_than:30d’ để chỉ định tuổi email bạn muốn xóa, chẳng hạn như ‘older_than:180d’.
Thay vào đó, nếu bạn muốn xóa email khỏi một nhãn cụ thể thì bạn có thể chỉnh sửa phần Gmail.App.search để bao gồm nhãn. Như thế này:
var thread = GmailApp.search(‘in:inbox old_than:30d’);
Để thực hiện quy trình tự động, hãy tạo trình kích hoạt tự động chạy tập lệnh vài ngày một lần. Tùy thuộc vào độ cũ mà bạn muốn xóa email, tôi chắc chắn rằng việc kích hoạt hàng tuần hoặc thậm chí hàng tháng sẽ ổn.
Lưu tất cả địa chỉ email vào Google Sheets
function getEmailAddresses() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheetName = "Email Addresses"; var sheet = ss.getSheetByName(sheetName); if (!sheet) { sheet = ss.insertSheet(sheetName); sheet.appendRow(["Email Address"]); } var threads = GmailApp.getInboxThreads(); var emailAddresses = []; var existingData = sheet.getDataRange().getValues(); if (existingData.length > 1) { var existingEmailAddresses = existingData.slice(1).flat(); } else { var existingEmailAddresses = []; } for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var emailAddress = messages[j].getFrom(); if (emailAddresses.indexOf(emailAddress) === -1 && existingEmailAddresses.indexOf(emailAddress) === -1) { emailAddresses.push(emailAddress); } } } for (var k = 0; k < emailAddresses.length; k++) { sheet.appendRow([emailAddresses[k]]); } }
Tập lệnh này sẽ tìm kiếm tất cả các email trong Gmail và sao chép tên cũng như địa chỉ email của người gửi/người nhận và lưu chúng trong Google Trang tính. Việc này có thể có nhiều cách sử dụng, chẳng hạn như tạo danh sách gửi thư để tiếp thị qua email hoặc tạo hồ sơ về tất cả những người liên hệ với bạn.
Tuy nhiên, việc tạo tập lệnh này hơi khác so với các tập lệnh khác vì bạn cần mở Tập lệnh Google Apps từ bên trong Google Trang tính để nó có thể xác định trang tính. Tuy nhiên, nó chỉ cần được thực hiện lần đầu tiên. Đây là cách thực hiện:
Mở một trang tính mới trong Google Trang tính. Ở đây hãy nhấp vào Tiện ích mở rộng trong menu trên rồi chọn Apps Script. Thao tác này sẽ mở Google Apps Script và bạn có thể thêm tập lệnh và chạy tập lệnh như tôi đã trình bày trước đó.
Tập lệnh sẽ tạo một Trang tính mới có tên “Địa chỉ email” với tên và địa chỉ email được viết trong cùng một ô. Bạn sẽ không cần phải mở lại trang tính sau này cho mỗi lần kích hoạt. Mọi địa chỉ email mới sẽ được cập nhật trong trang tính ở cuối mà không có bất kỳ sự trùng lặp nào.
Tùy thuộc vào tần suất bạn nhận được email từ người gửi mới, việc kích hoạt hàng ngày hoặc hàng tuần sẽ phù hợp.
Tự động lưu tệp đính kèm email vào Google Drive
function onNewEmail(e) { var threads = GmailApp.getInboxThreads(0, 1); var messages = threads[0].getMessages(); var folderName = "Email Attachments"; var folderIterator = DriveApp.getFoldersByName(folderName); var folder; if (folderIterator.hasNext()) { folder = folderIterator.next(); } else { folder = DriveApp.createFolder(folderName); } for (var i = 0; i < messages.length; i++) { var message = messages[i]; if (message.getAttachments().length > 0) { var attachments = message.getAttachments(); for (var j = 0; j < attachments.length; j++) { var attachment = attachments[j]; var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes())); var existingFiles = folder.getFiles(); var isDuplicate = false; while (existingFiles.hasNext()) { var existingFile = existingFiles.next(); var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes())); if (attachmentHash === existingFileHash) { isDuplicate = true; break; } } if (!isDuplicate) { folder.createFile(attachment); } } } } }
Một tập lệnh rất tiện dụng nếu bạn thường xuyên nhận được các tệp đính kèm quan trọng qua email. Điều này sẽ không chỉ bảo toàn các tệp đính kèm mà còn nhóm chúng lại với nhau trong giao diện tốt hơn nhiều để quản lý chúng.
Tập lệnh này được mã hóa để chỉ hoạt động trên các email mới mà bạn sẽ nhận được sau lần chạy đầu tiên. Nó sẽ tự động tạo một thư mục mới có tên “Tệp đính kèm email” trong Google Drive nếu không có. Tôi cũng tránh sử dụng tên để kiểm tra các tệp trùng lặp vì chúng có thể giống nhau đối với các tệp khác nhau. Thay vào đó, tập lệnh sẽ kiểm tra giá trị băm MD5 duy nhất dựa trên nội dung tệp.
Tôi biết không phải ai cũng chỉ muốn lưu tệp đính kèm mới và cũng có thể muốn lưu tệp đính kèm từ các email đã nhận được. Đối với điều này, bên dưới là tập lệnh được sửa đổi tuân theo các quy tắc tương tự nhưng thay vào đó lưu tệp đính kèm từ các email hiện có. Tuy nhiên, sẽ mất khá nhiều thời gian để lưu tất cả tùy thuộc vào số lượng tệp đính kèm mà bạn có.
function saveAllAttachmentsToDrive() { var folderName = "Email Attachments"; var folderIterator = DriveApp.getFoldersByName(folderName); var folder; if (folderIterator.hasNext()) { folder = folderIterator.next(); } else { folder = DriveApp.createFolder(folderName); } var threads = GmailApp.getInboxThreads(); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var message = messages[j]; var attachments = message.getAttachments(); for (var k = 0; k < attachments.length; k++) { var attachment = attachments[k]; var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes())); var existingFiles = folder.getFiles(); var isDuplicate = false; while (existingFiles.hasNext()) { var existingFile = existingFiles.next(); var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes())); if (attachmentHash === existingFileHash) { isDuplicate = true; break; } } if (!isDuplicate) { folder.createFile(attachment); } } } } }
Nhận trích dẫn truyền cảm hứng hàng ngày
function sendDailyQuoteEmail() { var apiKey = 'YOUR_API_KEY'; var endpoint="https://quotes.rest/qod"; var response = UrlFetchApp.fetch(endpoint, { headers: { 'X-TheySaidSo-Api-Secret': apiKey } }); var data = JSON.parse(response.getContentText()); var quoteContents = data.contents.quotes[0]; var quote = quoteContents.quote; var author = quoteContents.author; var recipient="[email protected]"; var subject="Daily Quote"; var message = `Here is your daily quote:\n\n"${quote}"\n\n- ${author}`; GmailApp.sendEmail(recipient, subject, message); }
Nó có thể không được sử dụng trực tiếp trong công việc hoặc quản lý email của bạn, nhưng thật tuyệt vời khi bạn có hứng thú cống hiến hết mình mỗi ngày ngay trong hộp thư đến. Khi được thiết lập đúng cách, tập lệnh này sẽ sử dụng API They Said So để gửi cho bạn câu trích dẫn truyền cảm hứng hàng ngày của họ qua email. Đây là cách thiết lập nó:
Trước tiên, bạn cần có khóa API cá nhân từ They Said So. Trên Họ đã nói vậy API trang bạn có thể đăng ký tài khoản miễn phí để lấy key. Nó cung cấp 5 cuộc gọi miễn phí, quá đủ cho một báo giá hàng ngày.
Khi bạn có khóa, hãy thay thế phần YOUR_API_KEY bằng khóa thực tế bạn nhận được từ Họ đã nói như vậy. Bạn cũng cần phải thay thế [email protected] chia sẻ địa chỉ email thực của bạn hoặc của người khác nếu bạn muốn thiết lập nó cho người khác.
Bây giờ, tất cả những gì bạn cần làm là thiết lập trình kích hoạt chạy hàng ngày, vì việc chạy nó sớm hơn thời điểm đó sẽ chỉ gửi lại báo giá của ngày hiện tại.
Từ cuối cùng
Cá nhân tôi không gặp vấn đề gì khi chạy tất cả các tập lệnh này cùng nhau và tôi cũng không đạt được hạn ngạch hàng ngày. Tôi chắc chắn rằng bạn cũng sẽ ổn thôi, miễn là bạn không sử dụng những yếu tố kích hoạt quá mạnh mẽ. Bạn cũng nên kiểm tra các tập lệnh này để đảm bảo không có tập lệnh nào gặp phải bất kỳ lỗi nào.