Найти в Дзене
Аналитика данных

Парсинг писем eml на python

Итак, допустим мы скачали все письма с почтового ящика, например так, как я описывал здесь.

Теперь из всех этих файлов мы можем получить неочевидные инсайты. Например: кто нам пишет больше всего, с какого домена, как часто, в какой день недели…? А ещё такие письма можно попробовать использовать в качестве холодной базы, конечно же с разрешения абонентов ;)

Но сначала, всю эту информацию нужно хитро вытащить из файлов eml. Сразу хочу отметить, что этот скрипт можно оптимизировать под аналитику сразу на лету, ещё на этапе выкачивания писем с почты. Но, после того как я через час попыток получал какую-либо ошибку и всё начинал с начала, я пришёл к мнению, что всё-таки лучше для все письма выкачать на локальную машину. А если писем не много или просто не хочется делать как я, то дело ваше. Открываем Jupyter Notebook, приступим…

Чтобы замерить время на выполнения скрипта пишем это и добавляем библиотеки.

Библиотеки и замер времени выполнения скрипта
Библиотеки и замер времени выполнения скрипта

Инициируем все нужные переменные.

Инициация
Инициация

Основной блок обработки писем, в котором мы получаем дату письма, тему, email отправителя, имя отправителя, которое указано в почтовом сервисе отправителя, текст письма и уникальный идентификатор писем UID. Все UID мы аккуратно запишем в txt-файл, чтобы потом можно было понять какие письма мы уже обработали, а какие нет.

Основной блок скрипта
Основной блок скрипта

После основного блока собираем все данные, которые удалось получить в один датафрейм, сохраняем все имена файлов писем в txt-файл. Также смотрим какой датафрейм у нас получился и делаем несколько преобразований данных.

Преобразование данных
Преобразование данных

Сохраняем датафрейм в excel-файл, смотрим сколько получилось строчек таблицы и видим за какое время отработал скрипт.

Сохранение данных и немного статистики
Сохранение данных и немного статистики

На этом всё, можно запускать :) Код python на GitHub.

Вместо заключения. Полный список полей, которые можно получить из писем eml

  1. **Subject** Заголовок письма.
  2. **From** Адрес отправителя.
  3. **To** Адрес получателя.
  4. **Cc** Адрес получателя в копии.
  5. **Bcc** Адрес получателя в скрытой копии.
  6. **Date** Дата и время отправки письма.
  7. **Message-ID** Уникальный идентификатор сообщения.
  8. **Reply-To** Адрес, на который следует отвечать на письмо.
  9. **Content-Type** Тип содержимого.
  10. **Content-Transfer-Encoding** Метод кодирования содержимого.
  11. **Body** Основное содержимое письма (может быть текстом или HTML).
  12. **Attachments** Файлы, прикрепленные к письму (названия, типы и т.д.).
  13. **In-Reply-To** Указывает на идентификатор исходного сообщения, на которое ответили.
  14. **References** Список идентификаторов сообщений, на которые ссылается это сообщение.