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

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

В предыдущей статье мы научились использовать JavaScript для автоматизации рассылки писем в приложении Mail. Сегодня мы разберем простейший пример парсинга входящей почты.

Что мы хотим сделать?

Собрать все письма от одного отправителя и сохранить их в единый текстовый файл.

Куда писать код?

  1. Открыть программу «Редактор скриптов» (Программы ->  Утилиты).
    Снимок экрана 2015-10-10 в 21.02.41
  2. В верхнем меню выбрать Файл ->Новый.Снимок экрана 2015-10-10 в 21.08.11

3. На переключателе языков выбрать JavaScript.
Снимок экрана 2015-10-10 в 21.11.37

Как записать содержимое письма в файл?

Для начала напишем простенький скрипт, который считывает содержимого последнего входящего письма и записывает его в только что открытый в программе 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 — тема письма.

Полная справочная информация о классах, объектах и методах доступна в меню Окно -> Библиотека редактора скриптов.

Снимок экрана 2015-10-11 в 22.39.29

Предыдущие публикации из цикла «Автоматизация рутины в OS X» вы можете найти по следующим ссылкам:

Это должен знать каждый:


✅ Подписывайтесь на нас в Telegram, ВКонтакте, и Яндекс.Дзен.



Добавить комментарий