Автоматизация рутины в OS X. Урок 4. Простейший парсинг почтового ящика

В предыдущей статье мы научились использовать JavaScript для автоматизации рассылки писем в приложении Mail. Сегодня мы разберем простейший пример парсинга входящей почты.
Что мы хотим сделать?
Собрать все письма от одного отправителя и сохранить их в единый текстовый файл.
Куда писать код?
- Открыть программу «Редактор скриптов» (Программы -> Утилиты).

- В верхнем меню выбрать Файл ->Новый.

3. На переключателе языков выбрать JavaScript.

Как записать содержимое письма в файл?
Для начала напишем простенький скрипт, который считывает содержимого последнего входящего письма и записывает его в только что открытый в программе TextEdit текстовый файл:
//Создаем переменные для приложения "Mail" и "TextEdit"
var Mail = Application("Mail");
var textEdit = Application("TextEdit");
//Создаем новый документ в программе TextEdit
var newDoc = textEdit.Document().make();
//Кладем в переменную текст первого письма из почтового ящика
var content = Mail.inbox.messages[0].content();
//Записываем текст письма в файл
newDoc.text = content;Если бы мы хотели считывать содержимое исходящих писем, то inbox следовало бы заменить на sentMailbox:
var content = content +"\n" + Mail.sentMailbox.messages[i].content();
Как записать содержимое нескольких писем в файл?
Скопировать в текстовой файл одно письмо можно и руками. А весь смысл автоматизации в том, чтобы повторить эту операцию неограниченное количество раз. Посмотрим, как это можно сделать:
//Создаем переменные для приложения "Mail" и "TextEdit"
var Mail = Application("Mail");
var textEdit = Application("TextEdit");
//Создаем новый документ в программе TextEdit
var newDoc = textEdit.Document().make();
//Запускаем цикл из 10 итераций
for (i=1;i<=10;i++)
{ //В каждую итерация добавляем к переменной текст письма с соответствующим номером
var content = content +"\n" + Mail.inbox.messages[i].content();
}
//Записываем текст всех писем в файл
newDoc.text = content;Символ «\n» обозначает перенос строки.
Как копировать текст писем только от определенного отправителя?
Просто собирать все письма в один файл тоже не особо полезное дело. Разберемся как считывать только письма посланные с конкректного адреса:
//Создаем переменные для приложения "Mail" и "TextEdit"
var Mail = Application("Mail");
var textEdit = Application("TextEdit");
//Создаем новый документ в программе TextEdit
var newDoc = textEdit.Document().make();
//Запускаем цикл из 20 итераций
for (i=1;i<=20;i++)
{
//Определям отправителя текущего письма
var sender = Mail.inbox.messages[i].sender();
//Если отправитель правильный - добавляем к переменной content текст письма с соответствующим номером
if (sender == "Ирина Чернова <irairache@gmail.com>")
{
var content = content +"\n" + Mail.inbox.messages[i].content();
}
}
//Вставлем текст писем в документ
newDoc.text = content;
По каким еще критериям можно фильтровать письма?
Таким же образом можно собирать письма датированные определенным числом, непрочитанные письма и пересписку объединенную одной темой. Для этого надо вместо свойства sender вызвать одно их нижеприведенных:
- date received — дата получения;
- date sent — дата отправки;
- read status — прочитано ли сообщение;
- subject — тема письма.
Полная справочная информация о классах, объектах и методах доступна в меню Окно -> Библиотека редактора скриптов.

Предыдущие публикации из цикла «Автоматизация рутины в OS X» вы можете найти по следующим ссылкам:
- Автоматизация рутины в OS X. Урок 1. Пакетная обработка изображений
- Автоматизация рутины в OS X. Урок 2. Генерация слайдов для презентаций
- Автоматизация рутины в OS X. Урок 3. Рассылаем спам
Это должен знать каждый:
✅ Подписывайтесь на нас в Telegram, Max, ВКонтакте, и Яндекс.Дзен.
