Скрипт Google Apps для подсчета количества писем, полученных вчера, с определенной меткой, затем сохранить # daily в электронную таблицу

#google-apps-script #google-sheets #gmail

#google-apps-script #google-sheets #gmail

Вопрос:

В основном то, что написано в названии, но я хочу:

1) Автоматически подсчитывает количество писем, полученных в мою учетную запись gmail, на которой есть определенная метка

2) Считайте один раз в день, даже если ноль

3) И ежедневно отчитывайтесь в Google Spreasheet

4) Чтобы я мог составлять ежемесячный отчет, подобный такому:

Дата / #
Дата / #
Дата / #

Итого за октябрь / #
Среднее за день / #

Я уверен, что это проще простого, используя Google Script для скриптовых гуру, но я понятия не имею. Пожалуйста, научите меня!

Комментарии:

1. Добро пожаловать в stackoverflow. чтобы сделать ваш вопрос действительным, покажите нам свой код и что не работает. спецификация не является допустимым вопросом.

Ответ №1:

Откройте новую таблицу без названия и перейдите в меню Инструменты -> открыть редактор сценариев и вставьте приведенный ниже код.

 function CountEmail() 
{
var label = GmailApp.getUserLabelByName("LabelName");
var labelname = label.getName();
var mails = label.getThreads();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var date = new Date();
sheet.appendRow([labelname,date,mails.length]);
}
 

Чтобы запускать скрипт ежедневно, вам нужно будет установить триггер проекта в скрипте приложения.Для этого выполните следующие действия:

Ресурсы -> Триггер текущего проекта -> Добавить триггер -> Время -> Часовой таймер -> выберите время, когда вы хотите запустить скрипт.

Общее количество электронных писем и среднее количество электронных писем в день можно рассчитать в самой электронной таблице, просто используя функцию Sum() .

Комментарии:

1. Спасибо, Суяш, я попробую это как можно скорее!

2. Суяш, я наконец-то нашел время все это устроить. Нужно ли мне помечать столбцы определенным именем, или лист может быть полностью пустым? В любом случае я собираюсь оставить это на несколько дней, посмотреть, как это работает.

3. Дополнительный вопрос: нужно ли оставлять электронное письмо в папке «Входящие», чтобы это сработало? Имеет ли значение чтение / непрочитывание для подсчета?

4. Лист может быть полностью blank…it это не повлияет на работу скрипта, если вы не пометите столбцы, но для вашего понимания вы можете пометить их. Пока у почты есть метка, которую вы ищете, не имеет значения, где находится почта … и прочитанное / непрочитанное не изменяет фактическое количество.

Ответ №2:

Ссылка на код, опубликованный Суяшем Ганди (цитирую его здесь на случай, если он будет удален, чтобы не было путаницы).

 NOTE: not my code!!! Credit to Suyash Gandhi
function CountEmail() 
{
  var label = GmailApp.getUserLabelByName("LabelName");
  var labelname = label.getName();
  var mails = label.getThreads();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var date = new Date();
  sheet.appendRow([labelname,date,mails.length]);
}
NOTE: not my code!!! Credit to Suyash Gandhi
 

Смотрите картинку ниже

введите описание изображения здесь

Здесь вы видите 2 потока, 1 электронное письмо в нижнем, 3 письма в верхнем и 1 черновик в верхнем. Этот данный код вернет здесь 2. Если вы хотите посчитать все 4 (или 5, если вам нужен черновик), вам нужно будет использовать API Gmail (см. Ссылку Здесь).

У меня есть скрипт, который получает все электронные письма (каждое сообщение) за определенный период времени и выводит дату получения, отправителя, получателя и заголовок в электронную таблицу. Это код, который фактически извлекает электронные письма. Остальная часть кода в основном создает файлы, генерирует строку запроса и сбрасывает скрипт, если он выполняется слишком близко к 6 минутам.

 queriedMessages =
      Gmail.Users.Messages.list(userInfo.mail,
                                {
                                  'q': queryString,
                                  'pageToken': execProperties.nextPageId
                                });
 
  • userInfo.mail это адрес электронной почты, с которого вы получаете электронные письма. Это просто написано так, потому что скрипт может быть запущен с любой учетной записью
  • queryString это строка, которая используется для поиска электронных писем и точно такая же, как вы используете в окне поиска gmail. Таким образом, у вас будет label:labelname
  • pageToken это код страницы поиска (в основном то, что нужно, когда вы нажимаете кнопку «Следующая страница» в gmail). Он возвращается как часть этой функции, чтобы вы могли получить к нему доступ из queriedMessages.nextPageToken . Таким образом, если вы получите более 1 страницы, то она вам понадобится для доступа к остальным сообщениям.

Кроме того, имейте в виду, что вы получаете все сообщения, соответствующие запросу, поэтому, если вы делаете это ежедневно, вы можете включить триггер. Кроме того, имейте в виду, что функции, запускаемые из триггеров, игнорируют ваш часовой пояс (известная ошибка), но вы можете довольно легко выяснить, как создать запрос, который работает всего 1 день. Лично я просто беру 1 день в начале и конце и просто отфильтровываю эти сообщения.

Комментарии:

1. В исходном вопросе, заданном @Neutron80, говорится, что он хочет подсчитать количество писем, «полученных» в его учетной записи Gmail. То, что вы сказали здесь, правильно, но по определению вопроса вывод того, что вы предложили, был бы неправильным, поскольку поток может также состоять из ответов, отправленных пользователем, и, очевидно, эти письма не должны учитываться как полученные электронные письма. Чтобы подсчитать количество электронных писем, вам нужно будет проверить, получено или отправлено электронное письмо, что снова добавит несколько строк в код. Но все это сказано и сделано, все зависит от фактического требования.

2. @SuyashGandhi предлагаемый мной подход позволяет вам настраивать, какие сообщения вы хотите. Как мне грустно, это то же самое, что использовать окно поиска в пользовательском интерфейсе Gmail. Итак, если, например, вы получаете 4 электронных письма и отправляете 1, которые находятся в 1 потоке (допустим, сначала 2 человека ответили друг другу без вас), то, согласно вашему ответу, он все равно будет считаться 1, тогда как в моем ответе это будет 4. как вы можетепросто исключите сообщение, которое вы отправили сами (простое -from:me в строке должно это сделать). Но, как мы все можем согласиться. Зависит от того, хотите ли вы считать разговоры или фактические электронные письма.

3. Витаутас, Суяш, мои извинения, я настолько новичок в этом, что практически понятия не имею, о чем вы, ребята, обсуждаете. Для начала я опробую метод Суяша и сообщу о результатах. Спасибо вам обоим за то, что пролили свой свет!