Как автоматизировать процессы GMail, даже не зная ничего про программирование.
Google Apps Script — это усеченная версия JavaScript дополненная классами и методами для работы с сервисами Google. Для Gmail и Google Документов этот язык служит тем же, чем Visual Basic for Application для Outlook, Word, Excel и PowerPoint. Эта статья первая в цикле рецептов для решения повседневных проблем. Фишки, описанные ниже, внедряются за считанные минуты и смогут сэкономить ваше личное время несчетное число раз. Чтобы применить на практике информацию из этой статью не нужно знать ни Google Apps Script, ни даже JavaScript. Достаточно четко следовать инструкциям.
Как пользоваться инструкциями
- Заходим на Google Docs
- Авторизируемся под своим аккаунтом;
- В соседней вкладке открываем Gmail и убеждаемся, что выбрали нужный почтовый ящик;
- Создаем новую электронную таблицу;
- Выбираем пункт меню Инструменты -> Редактор скриптов. В результате должно открыться вот такое окно:
- Вставляем исходный код в редактор скриптов;
- Редактируем его в соответствии с комментариями;
- Нажимаем кнопку «Запустить» на панели инструментов;
- Если перед выполнением скрипт попросит авторизации и разрешений на действия, соглашаться
Организуем групповую рассылку;
Существует множество онлайн сервисов для организации групповых рассылок. Их бесплатный функционал зачастую весьма ограничен, в некоторой степени рискованно разрешать какому-то левому сайта отсылать почте от своего имени и быстрее будет воспользоваться Google Apps Script.
Подготовка:
- В первый столбец заносим емейлы получателей. Пример: «[email protected]»;
- Во второй столбец заносим обращения к получателям получателей. Пример: «Анатолий Катц»;
Код:
[jscript]
function groupDelivery() {
// Число 5 надо заменить на число адресатов в таблице
var rowsAmount = 5 ;
// Здесь надо указать тему писем
var messageSubject = "Приглашение";
var currentSheet = SpreadsheetApp.getActiveSheet();
var dataRange = currentSheet.getRange(1, 1, rowsAmount, 2);
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var emailAddress = row[0];
// Поддкорректируйте обращение и текст письма под свои нужды
var messageText = row[1] + ", " + "мы рады Вас пригласить…";
MailApp.sendEmail(emailAddress, messageSubject, messageText);
}
}
[/jscript]
Warnings: очень внимательно проверьте адреса и имена получателей и проследите чтобы список начинался с ячейки A1.
Отвечаем на все письма за один прием;
Когда человек уходит в отпуск, то он настраивает автоответ и всем, кто пишет ему сразу приходит: «Я на море, ждите ответа 15 числа». Но бывает ситуации, когда нет возможности отвечать на почту некоторое время, автоответчик предварительно не был настроен и сотни писем ждут своей очереди. Как не умереть от стресса вызванного десятками часов непрерывного ответа на почту и не обидеть своих коллег? Можно скриптом за пару минут отправить им всем письмо: «Извините, у меня форс-мажор, несколько дней был в отлучке. Внимательно ознакомлюсь с Вашим письмом и отвечу в ближайшую неделю. Если дело срочное, позвоните мне пожалуйста».
Код:
[jscript]
function autoReply() {
// Здесь надо указать количество сообщений для ответа, не забыв вычесть из него единицу
amountMessageforReply=1;
// Здесь должен быть красивый вежливый текст
replyText="Был в отпуске. Сорри. Скоро отпишусь. Если срочняк, то набери.";
var threads = GmailApp.getInboxThreads(0, amountMessageforReply);
for (var i = 0; i <= threads.length; i++) {
threads[i].reply(replyText);
}
}
[/jscript]
Warnings: подумайте о том, всем ли корреспондентам корректно посылать составленный вами текст автоответа. Не стоит ли немного модифицировать скрипт и исключить некоторых адресатов из рассылки?
Собираем вложения в папку на Google Drive;
Многие люди хранят в почте море важных файлов: фотографии, образцы документов, заполненные анкеты, статьи и т.д. Разобрать эти авгиевы конюшни руками выше сил человека с нормальным уровнем лени. Но можно воспользоваться простейшим скриптом. Он соберет все вложения из писем в папку на Google Drive, которую потом можно перенести к себе на компьютер и молниеносно находить нужные файлы с помощью Spotlight.
Код;
[jscript]
function saveToGoogleDrive() {
var driveFolder = "Папка для вложений"; // Здесь надо указать имя папки куда сохранять вложения
amountMail = 1 ; // Количество писем из которых будем забирать вложения
var threads = GmailApp.getInboxThreads(0, amountMail);
var folder = DriveApp.getFoldersByName(driveFolder);
if (folder.hasNext()) {
folder = folder.next();
} else {
folder = DriveApp.createFolder(driveFolder);
}
for (var x=0; x<=threads.length; x++) {
var message = threads[x].getMessages()[0];
var att = message.getAttachments();
for (var z=0; z<=att.length; z++) {
file = folder.createFile(att[z]);
}
}
}
[/jscript]
Warning: проконтролируйте чтобы у вас было достаточно места на Google Диске. В соответствии с располагаемым свободным пространством надо выбирать число писем для обработки.
Собираем письма от одного отправителя в текстовый файл;
Иногда переписка с человеком растягивается на несколько десятков или сотен писем, которые разбиты по разным цепочкам тем. И свести смысловые концы с концами в такой ситуации бывает трудоемко. Особенно когда читаешь переписку имевшую место быть некоторое время назад. В этой ситуации поможет скрипт, собирающий все интересующие письма в текстовый файл, который можно обозреть единым взором (а не открывая письмо за письмом) и быстро найти нужную информацию.
Код:
[jscript]
function writeToFile() {
var doc = DocumentApp.create(‘Переписка’); // Новый файл появится в корневой папке Google диска
var senderAdress = "[email protected]"; // Адрес, переписку с которым надо сохранить
var finalText = "";
var body = doc.getBody();
var threads = GmailApp.search(senderAdress);
for (var x=0; x<=threads.length; x++) {
var messages = threads[x].getMessages();
for (i=0;i<=messages.length-1;i++) {
finalText=finalText + messages[i].getSubject() + messages[i].getPlainBody() + "";
}
body.appendParagraph(finalText);
}
}
[/jscript]
Warning: некоторые личности имеют привычку общаться сразу с нескольких адресов, в лучшем случае с личного и рабочего:-) Для таких ситуаций надо немного переписать скрипт или запустить его несколько раз.
- Автоматизируем Google Таблицы на Google Apps Script
- Google Apps Script для Docs в примерах
- Планируем жизнь с Google Calendar и Google Apps Script
- Простые автоматизации для Google Drive
35 комментариев
Форум →Неужели спешка такая, что статью даже не перевести целиком? Нет русского эквивалента “Warning”?
@D-wright, это не перевод.
@Ирина Чернова, а почему бы не написать “Внимание”?
@Naparnik, лучше уж тогда “Предупреждение”). Мне просто нравится слово Warning, оно вызывает у меня положительные ассоциации)
Как сделать чтобы imap папки отображались внутри папки gmail которая во “входящих” в Mail app на OS X ? Никак не могу побороть.
@pupzem, а то они не во “входящие” а внизу отдельным блоком. А в gmail они во входящих. Выручайте кто знает как плизззз
@pupzem, если на iphones.ru не было про это статьи, то наверное стоит ее написать в ближайшее время, в двух словах не ответишь)
@Ирина Чернова, Ирина, выручите плизз… Намекните хоть куда копать, правда важно, почты много :-( гуглил гуглил ничего не нагуглилось. Префиксы пробовал и так и сяк ничего не получилось пока что. В родной программе все ок – в яблочной Mail именно gmail не получается, хотя остальные ящики получились.
@pupzem, может лучше не копать (раз Вы уже все перепробовали), а написать на JXA скрипт, который будет перемещать эти письма во входящии. И настроить его запуск при каждом открытии Mail?
@Ирина Чернова, нет, я создал кучу имап папок в входящих и распределяю все письма по этим папкам по мере прихода. И неудобно что в Mail OS X почему-то эти вложенные имап папки отображаются отдельно от папки gmail во “входящих” – при этом в web gmail все окей и в почтовой программе Google тоже все правильно отображается :-(
Подскажите. А как сделать что бы каждый понедельник отправлялось одно и то же письмо двум людям? Спасибо
@Sergey, Сам не пробовал, но может это то что вам нужно? Поищите в Google: How to Schedule Gmail Messages with a Google Sheet
@Sergey,очень просто! В Редакторе скриптов открываешь Ресурсы-> Триггеры текущего проекта -> Добавить новый триггер.
@Ирина Чернова, При этом письмо не нужно создавать каждую неделю, если оно не меняется?
@Sergey, создайте вот такую функцию и настройте ее еженедельное выполнение.
function mondayMessages()
{
MailApp.sendEmail(“[email protected]”, “Тема письма”, “Текст письма”);
MailApp.sendEmail(“[email protected]”, “Тема второго письма”, “Текст второго письма”);
}
@Ирина Чернова, протестировал через триггер, действительно работает)
Спасибо.
Ирина!
В вашем “Flowlab.io — веб-сервис для создания игр” как мне кажется невозможно оставить комментарий. Вероятно потому их там и нет.
Если конечно это не by some reason.
@kbarabas, да у меня тоже не получилось оставить коммент( с утра спрошу у Артура почему так(
Ирина, добрый день.
Еще вопросик. А как файл к письму прикрепить через скрипт рассылки, например из Google Drive. В интернете ответа не нашел. Или это вообще не возможно
@Sergey, возможно;-)
Код проверила, мне письмо пришло с вложением, ID файла легко найти в Google Drive.
function addAttachments()
{
var file = DriveApp.getFileById(‘1BF5EWijdjKjW1ooOcYLS-wvqHzs-YCQIUWLkJd7txAE’);
MailApp.sendEmail(‘[email protected]’, ‘Тема письма’, ‘Текст письма’, {
name: ‘Имя файла’,
attachments: [file.getAs(MimeType.PDF)]
});
}
@Ирина Чернова, Добрый день!
Мне тоже ОЧЕНЬ надо отправлять технологической рассылкой файлик бинарник, но не PDF. Как быть в таком случае? Покопал тему, там только разжевывают про PDF и HTML. Скажем я файлик хотел бы отправлять в таком виде как он есть или завернуть в архив…
ЗАРАНЕЕ СПАСИБО!
@Yuri28, вот код для отправки файла, упакованного в архив:
function addAttachments()
{
var file = DriveApp.getFileById(“0ByNftQqMheCPR0s4UndvQlJ6ek0”);
MailApp.sendEmail(“[email protected]”, “Архив”, “См. вложение”, {
name: “Архив”,
attachments: [file.getAs(MimeType.ZIP)]
});
}
@Ирина Чернова, а если вы не боитесь спам фильтров и хотите отправлять бинарник как есть:
function addAttachments()
{
var file = DriveApp.getFileById(“0ByNftQqMheCPR0s4UndvQlJ6ek0″);
MailApp.sendEmail(“[email protected]”, “Архив”, “См. вложение”, {
name: “Архив”,
attachments: [file.getBlob()]
});
}
@Ирина Чернова,
ИРИНА, СПАСИБО!
ВСЁ ВЕЛИКОЛЕПНО ОТПРАВЛЯЕТСЯ!
ВЫ ЛУЧШАЯ!
Круто, надо попробовать. Понимаю, что опыт. Поискал Вас в интернете, много статей интересных пишете, действительно актуальных.
MimeType.PDF – это название файла, а 1BF5EWijdjKjW1ooOcYLS-wvqHzs-YCQIUWLkJd7txAE его ID?
А где информацию по примерам для GAS посмотреть?
@Sergey, как ни странно мне не попадалось даже на английском языке адекватной качественной коллекции примеров кода или статей. Обычно я смотрю документацию официальную, она очень подробная, но некоторые абстрактные концепции в ней сложны для понимания сходу, так как требуют глубоких знаний о работе сервисов Google. Если есть какие-то вопросы конкретные можете писать их в комменты. Мне легко и интересно на них отвечать:-)
@Sergey, MimeType.PDF – это расширение файла вложения)
Что-то не то
function groupDelivery() {
// Число 5 надо заменить на число адресатов в таблице
var rowsAmount = 5 ;
// Здесь надо указать тему писем
var messageSubject = “Приглашение”;
var currentSheet = SpreadsheetApp.getActiveSheet();
var dataRange = currentSheet.getRange(1, 1, rowsAmount, 2);
var data = dataRange.getValues();
var file = DriveApp.getFileById(’0B63n-qym5hMsYlVrRHFWdGVDbFU’);
for (i in data) {
var row = data[i];
var emailAddress = row[0];
// Поддкорректируйте обращение и текст письма под свои нужды
var messageText = row[1] + “, ” + “мы рады Вас пригласить…”;
MailApp.sendEmail(emailAddress, messageSubject, messageText, {name: ‘SMIT_PRESENTATION’, attachments: [file.getAs(MimeType.PDF)]});
}
}
@Sergey, расшарь доступ к файлу на [email protected], я посмотрю, скорее всего дело в преобразовании презентации в PDF(
@Sergey, я поправила кое-какие кавычки, они как-то криво копируются из-за плагина вордпресс. Убрала лишнии параметры вложения и заработало.
function groupDelivery() {
// Число 5 надо заменить на число адресатов в таблице
var rowsAmount = 1 ;
// Здесь надо указать тему писем
var messageSubject = “Приглашение”;
var currentSheet = SpreadsheetApp.getActiveSheet();
var dataRange = currentSheet.getRange(1, 1, rowsAmount, 2);
var data = dataRange.getValues();
var file = DriveApp.getFileById(“0B63n-qym5hMsYlVrRHFWdGVDbFU”);
for (i in data) {
var row = data[i];
var emailAddress = row[0];
// Поддкорректируйте обращение и текст письма под свои нужды
var messageText = row[1] + “, ” + “мы рады Вас пригласить…”;
MailApp.sendEmail(emailAddress, messageSubject, messageText, {attachments: [file]});
}
}
Ирина. А как это сделать на двух листах. Например, на первом листе берутся значения “Приветствие”, “текст письма” и ID файла, а на втором список адресатов?
@Sergey, Принцип такой:
tableDoc = SpreadsheetApp.openById(“1RzIv25ZnSEUI3cyu-h-x0JKnkScPEA5WwiEDqX-stEE”);
bonjour = tableDoc.getSheetByName(“Лист с приветствиями”).getRange(“A1”).getValue();
email = tableDoc.getSheetByName(“Лист с адресами”).getRange(“A1”).getValue();
Подробнее про таблицы читайте здесь http://www.iphones.ru/iNotes/506236
Принцип помог)
@Sergey, очень хорошо)
Бьюсь с распаковкой вложений (от определённого адресата) на Gdrive.
попробовал способ из этой статьи, не получилось :(
Не удается обнаружить метод createFile((class)). (строка 15, файл Код)
Я бы хотел собирать счета от мтс в папки соответсвующие периодам.
Помогите пожалуйста.
Спасибо.
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Можно ли избежать проблем при ремонте Touch ID?
Как на iPhone отключить размытие фона в портретном фото
Почему в iPhone 5 не работает LTE у оператора Мегафон?
Как на любом Mac настроить переключение языка одной кнопкой
Как измерить уровень окружающего шума с iPhone без Apple Watch
Можно ли заряжать MacBook двумя зарядками одновременно
Как в macOS закрепить любую заметку поверх всех окон
Почему в Finder на Mac не отображается внешний диск или флэшка