Перебор писем с условиями

Можно ли при использовании функции “прочитать письма” получить переменные с темой письма и временем, а также перебрать полученные письма?

Прочитайте описание функции здесь - https://knowledge.electroneek.ru/opisanie-funkcii-devtool/elektronnaya-pochta/prochitat-pisma

На выходе идет массив объектов. Каждый объект соответствует одному письму. Хранятся в том числе пути к аттачментам (для этого надо галочку в параметрах поставить и путь указать), тема, текст, даты.

Да, это понятно.
Как перебрать этот массив?

Цикл можете сгенерировать простым образом.
Создать счетчик, например, counter = 0. Далее перетащить функцию “Если то”, прописать там, например, counter < mails.length, а дальше наполнять ветку “Да” (это будет телом цикла). В конце увеличить счетчик и замкнуть обратно на условие.

@Artem_Kvach,

Отлично!
А обращение к свойствам массива? Через точку или индекс?

К элементам массива - через индекс. К ключам объекта - через точку или через квадратные скобки.
Пример:
mails[3].subject - берем тему письма четвертого сообщения.
Или mails[2]["subject"] - берем тему письма третьего сообщения, только указали по-другому.

То есть для итерирования могу использовать mails[counter].subject ?

Да, совершенно верно

Получилось письма перебрать, отлично!
Возникает еще один вопрос: можно ли как-то сделать так, чтобы бот повторно не работал с письмами, с которыми он уже работал? (1 письмо - 1 обработка)
Хорошая практика или штатное решение?

@Artem_Kvach, на каждой итерации запоминайте дату считанного письма. Письма по умолчанию отсортированы по дате получения (сначала самые ранние). Можете сами отсортировать методом sort(). В качестве даты подставляйте запомненный результат (опция “Вычислить значение” - там указываете переменную).

Также скажу, что у нас встроена библиотека moment.js для удобной работы с датами. Это на случай, если потребуется.

Я, наверно, не совсем корректно поставил вопрос.
Бот запускается много раз в течении суток, как сделать так, чтобы уже просмотренные письма им просматривались?
Или можно зайти с другого конца вопроса. Как получить точную текущую дату из программы? Чтобы можно было запустить бота с проверкой на эту дату.

@Artem_Kvach, текущую дату можно получить, например, прописав new Date() или moment().
Чтобы уже просмотренные письма робот НЕ просматривал, то, как я сказал, Вы запоминаете на каждой итерации дату письма, пусть это будет переменная last_mail_date. Далее в функции “Прочитать письма” в “Вычислить значение” Вы её и указываете.

Переменные глобальные, привязаны к аккаунту. Если Вы сами не очистите все переменные, нажав на корзинку, то значение этой переменной сохранится, и Вы можете ее использовать при следующем запуске. Либо же Вы можете записать последнюю дату в текстовый файл, а затем оттуда подтягивать. Тоже выход.

То что нужно! Буду пробовать

1 Симпатия

Все получилось. Спасибо!
И последний вопрос.
Такой кейс:
Пришло 2 письма. С одинаковой темой. В один день. С одинаковым названием вложения. Как сохранить оба вложенных файла? (файл называется “отчет.docx”)

{{date}} - создаются папки по датам писем.
{{subject}} - письма по темам писем.
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Тогда просьба, пожалуйста, отметить как решение тот пост, который привел к решению вопроса. Это полезно будет для всех :slight_smile:

Все верно) Дата и тема одинаковая. Название файла тоже. Но сохраниться должно оба файла. Как?

Дата самого сообщения точно не будет одинаковой, если только два сообщения не пришли буквально в одну и ту же миллисекунду)
Скорее всего между сообщениями есть хотя бы какая-то разница во времени. Если так, то можно пробовать разделять эти сообщения так, чтобы в один заход считывалось одно, а в другой - другое. Путь к сохранению вычислять динамически.

Да, я так и думал.
Однако по факту, если я указываю такую строчку сохранения - C:\Users\Администратор\Desktop\Выставление счетов\Документы{{date}}{{subject}}
А создается только с датой - без времени.

%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA