Что такое Google Apps Script и его возможности для Gmail
Google Apps Script – это облачная платформа разработки, позволяющая автоматизировать задачи и расширять функциональность сервисов Google, включая Gmail. С его помощью можно создавать пользовательские решения для автоматической обработки почты, интеграции с другими сервисами Google и сторонними приложениями. В частности, Google Apps Script предоставляет доступ к Gmail API, что позволяет программно управлять почтовым ящиком, читать письма, отправлять ответы, создавать черновики и многое другое. Это открывает широкие возможности для автоматизации задач, таких как фильтрация спама, обработка заказов, уведомления и интеграции с другими системами.
Настройка среды разработки Google Apps Script
Для начала работы с Google Apps Script необходимо открыть редактор скриптов. Это можно сделать несколькими способами:
Непосредственно из Gmail: Откройте Gmail, перейдите в "Настройки" -> "Все настройки" -> "Дополнительно" и включите "Редактор скриптов". Затем в меню Gmail появится пункт "Скрипты".
Через Google Drive: Создайте новый Google Apps Script проект в Google Drive.
Через отдельный URL: Откройте script.google.com.
После открытия редактора вы увидите базовый интерфейс, состоящий из текстового редактора, меню и панели инструментов. Здесь вы будете писать и отлаживать свои скрипты.
Основы работы с Gmail API через Apps Script
Для взаимодействия с Gmail в Google Apps Script используется класс GmailApp. Он предоставляет методы для доступа к различным аспектам почтового ящика.
Пример кода для получения списка входящих сообщений:
/**
* @function getInboxMessages
* @description Gets a list of inbox messages.
* @return {GmailThread[]} An array of GmailThread objects.
*/
function getInboxMessages(): GmailThread[] {
const threads: GmailThread[] = GmailApp.getInboxThreads();
Logger.log(threads.length); // Logs the number of threads in the inbox.
return threads;
}
Этот код получает все цепочки писем (threads) из входящих. Для получения отдельных сообщений из цепочки используйте метод getMessages() класса GmailThread. Важно помнить, что для выполнения действий, требующих авторизации (например, отправка писем), скрипт запросит у вас разрешение на доступ к Gmail.
Автоматизация обработки входящих писем
Автоматическая сортировка писем по меткам и папкам
Сортировка писем – одна из самых распространенных задач. Можно автоматически помечать письма определенными метками или перемещать их в разные папки на основе отправителя, темы или содержимого.
Пример кода для пометки писем от определенного отправителя:
/**
* @function labelSender
* @description Labels emails from a specific sender.
* @param {string} senderEmail The email address of the sender to label.
* @param {string} labelName The name of the label to apply.
*/
function labelSender(senderEmail: string, labelName: string): void {
const threads: GmailThread[] = GmailApp.search(`from:${senderEmail}`);
if (threads.length > 0) {
const label: GmailLabel = GmailApp.createLabel(labelName);
label.addToThreads(threads);
}
}
// Example usage:
// labelSender("sales@example.com", "Sales");
Отправка автоматических ответов на письма
Автоматические ответы полезны для уведомления отправителей о вашем отсутствии или подтверждения получения их запроса.
Пример кода для отправки автоматического ответа:
/**
* @function sendAutoReply
* @description Sends an automatic reply to unread emails.
* @param {string} replyText The text of the auto-reply.
*/
function sendAutoReply(replyText: string): void {
const threads: GmailThread[] = GmailApp.search('is:unread');
threads.forEach(thread => {
const message: GmailMessage = thread.getMessages()[0];
const sender: string = message.getFrom();
const subject: string = message.getSubject();
// Avoid replying to auto-replies to prevent loops.
if (subject.indexOf('Auto:') === -1) {
message.reply(replyText);
thread.markRead();
}
});
}
// Example usage:
// sendAutoReply("Thank you for your email. I will be out of office until...");
Извлечение данных из писем (например, номера заказов)
Автоматическое извлечение данных из писем позволяет обрабатывать информацию в пакетном режиме, например, номера заказов, контактные данные и т.д. Для этого используются регулярные выражения.
Пример кода для извлечения номера заказа:
/**
* @function extractOrderNumber
* @description Extracts an order number from an email body using a regular expression.
* @param {string} emailBody The body of the email to search.
* @return {string | null} The order number if found, otherwise null.
*/
function extractOrderNumber(emailBody: string): string | null {
const regex: RegExp = /Order Number: (\d+)/;
const match: RegExpMatchArray | null = emailBody.match(regex);
if (match && match.length > 1) {
return match[1];
}
return null;
}
// Example usage:
// const orderNumber = extractOrderNumber(GmailApp.getInboxThreads()[0].getMessages()[0].getBody());Удаление старых писем по расписанию
Регулярное удаление старых писем помогает поддерживать порядок в почтовом ящике. Это можно автоматизировать с помощью триггеров Google Apps Script.
Пример кода для удаления писем старше определенного возраста:
/**
* @function deleteOldEmails
* @description Deletes emails older than a specified number of days.
* @param {number} days The number of days after which to delete emails.
*/
function deleteOldEmails(days: number): void {
const cutoffDate: Date = new Date();
cutoffDate.setDate(cutoffDate.getDate() - days);
const threads: GmailThread[] = GmailApp.search(`before:${cutoffDate.getFullYear()}-${cutoffDate.getMonth() + 1}-${cutoffDate.getDate()}`);
threads.forEach(thread => {
thread.moveToTrash();
});
}
// Example usage (delete emails older than 30 days):
// deleteOldEmails(30);
Автоматизация отправки писем
Создание и отправка персонализированных писем
Персонализированные письма увеличивают вовлеченность получателей. В Google Apps Script можно динамически генерировать контент письма на основе данных.
Пример кода для отправки персонализированного письма:
/**
* @function sendPersonalizedEmail
* @description Sends a personalized email to a recipient.
* @param {string} recipientEmail The email address of the recipient.
* @param {string} recipientName The name of the recipient.
*/
function sendPersonalizedEmail(recipientEmail: string, recipientName: string): void {
const subject: string = `Hello ${recipientName}!`;
const body: string = `Dear ${recipientName},
Thank you for your interest in our product.
Sincerely,
The Example Team`;
GmailApp.sendEmail(recipientEmail, subject, body);
}
// Example usage:
// sendPersonalizedEmail("user@example.com", "John Doe");
Массовая рассылка писем (mail merge)
Mail merge позволяет отправлять массовые рассылки с персонализированным контентом. Данные для рассылки можно брать, например, из Google Sheets.
Пример кода для mail merge из Google Sheets:
/**
* @function sendMailMerge
* @description Sends a mail merge based on data from a Google Sheet.
*/
function sendMailMerge(): void {
const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getActiveSheet();
const dataRange: GoogleAppsScript.Spreadsheet.Range = sheet.getDataRange();
const data: any[][] = dataRange.getValues();
// Assumes the first row contains headers: Email, Name, ...
for (let i = 1; i < data.length; i++) {
const email: string = data[i][0]; // Email address
const name: string = data[i][1]; // Recipient name
const subject: string = `Personalized Email for ${name}`;
const body: string = `Dear ${name},
This is a personalized email.
Sincerely,
The Example Team`;
GmailApp.sendEmail(email, subject, body);
}
}
Отправка писем по расписанию или триггеру
Для автоматической отправки писем по расписанию используются триггеры Google Apps Script. Можно настроить триггер, который будет запускать скрипт каждый час, день или неделю.
Для создания триггера необходимо перейти в редакторе скриптов в меню "Изменить" -> "Триггеры текущего проекта".
Отправка уведомлений из Google Sheets через Gmail
Этот пример показывает, как отправлять уведомления из Google Sheets при изменении данных.
/**
* @function sendSheetUpdateNotification
* @description Sends a notification email when a Google Sheet is updated.
* @param {GoogleAppsScript.Events.SheetsOnChangeEvent} e The event object.
*/
function sendSheetUpdateNotification(e: GoogleAppsScript.Events.SheetsOnChangeEvent): void {
const sheetName: string | undefined = e.range?.getSheet().getName();
const user: string | undefined = Session.getActiveUser()?.getEmail();
const subject: string = `Google Sheet Updated: ${sheetName}`;
const body: string = `The Google Sheet '${sheetName}' was updated by ${user}.`;
GmailApp.sendEmail("notification@example.com", subject, body);
}
Необходимо создать триггер onEdit в редакторе скриптов для активации данного кода при изменении таблицы. Данный пример предполагает, что уведомления отправляются на адрес "notification@example.com".
Примеры использования Google Apps Script для интеграции Gmail с другими сервисами
Сохранение вложений из Gmail на Google Drive
Автоматическое сохранение вложений удобно для резервного копирования или автоматической обработки файлов.
Пример кода для сохранения вложений на Google Drive:
/**
* @function saveAttachmentsToDrive
* @description Saves attachments from Gmail to Google Drive.
* @param {string} folderName The name of the folder on Google Drive to save attachments to.
*/
function saveAttachmentsToDrive(folderName: string): void {
const threads: GmailThread[] = GmailApp.getInboxThreads();
threads.forEach(thread => {
const messages: GmailMessage[] = thread.getMessages();
messages.forEach(message => {
const attachments: GoogleAppsScript.Gmail.GmailAttachment[] = message.getAttachments();
attachments.forEach(attachment => {
const folder: GoogleAppsScript.Drive.Folder = DriveApp.getFolderById("YOUR_FOLDER_ID"); // Replace with your folder ID
folder.createFile(attachment);
});
});
});
}
Замените `