Всем привет, часто сталкиваетесь с проблемой переполнения почтового ящика программы Outlook? В данной статье я расскажу, как увеличить объем файла PST для программы Outlook. Данный метод подходит для всех версий данной программы. И так, приступим. Первое, что необходимо сделать это открыть реестр. Для того чтобы открыть реестр необходимо нажать win+r, новое окно "Выполнить" ввести команду regedit нажать "ОК" Откроется окно реестра, где необходимо пройти Для Outlook 2007: HKEY_CURRENT_USER\Software\Microsoft\Office\12...
🖥 Тайны виртуальных конвертов: чтение и парсинг .pst файлов Сегодня я рассмотрю алгоритм чтения и парсинга .pst файлов, написанный на python. Для работы с одним файлом и оставлю в стороне параллельную обработку, которую стоит использовать при работе с большим числом архивов. Для открытия и чтения .pst файлов воспользуюсь pypff – python оберткой для библиотеки libpff, написанной на C. Эта библиотека позволяет работать с форматами PFF (Personal Folder File) и OFF (Offline Folder File), в которые как раз и входит формат .pst, наряду с форматами .pab (Personal Address Book) и .ost (Offline Storage Table). # Установка библиотеки pip install libpff-python # Импортирование библиотеки import pypff Работа с файлом будет подобна работе с древовидным архивом. Поэтому в первую очередь после чтения файла необходимо получить корневую папку: pst = pypff.file() pst.open(“example.pst”) root = pst.get_root_folder() Дальше порядок действий будет отличаться в зависимости от задач. Например, вы можете посмотреть список дочерних писем или папок и выбрать из них нужные и обработать только их. В случае с задачей поиска идентификаторов, буду вынужден обрабатывать все письма из всех папок, так как обрабатываемые почтовые ящики имеют разную структуру папок (в первую очередь разные названия и степени вложенности). Для получения списка всех писем воспользуюсь рекурсивным методом, который проходит по папке и собирает содержимое из нее и её дочерних папок: def parse_folder(base): messages = [] for folder in base.sub_folders: if folder.number_of_sub_folders: # Извлечение писем из дочерней папки messages += parse_folder(folder) # Обработка писем в текущей папке for message in folder.sub_messages: messages.append({ "folder": folder.name, "subject": message.subject, "sender_name": message.sender_name, "sender_email": get_sender_email(message), "datetime": message.client_submit_time, "body_plain": get_body(message) }) return messages # Извлечение всех писем из файла messages = parse_folder(root) Для анализа была необходима следующая информация: тема письма, тело письма, папка, дата и время и данные об отправителе. Большую часть этой информации можно получить, просто взяв сами атрибуты объекта, но такой вариант не сработает для тела письма и почтового адреса отправителя. Как можно видеть из списка атрибутов pff.message, письмо может иметь тело в трех форматах (plain_text, html, rtf), а точнее в одном из этих трех. Для задачи меня будет интересовать получение тела письма в формате текста, поэтому необходимо конвертировать html строки (которых оказалось больше всего). Для этого воспользуемся библиотекой BeautilfulSoup: создадим объект bs на основе нашего html_body и воспользуемся методом get_text(), чтобы получить очищенный от html тегов текст письма. На этом можно было бы остановится, но в результирующих строках оставались комментарии с описанием стилей и шрифтов, поэтому дополнительно производится их удаление с помощью регулярных выражений, а также замена двойных символов перевода строки на одинарные. 📌Читать дальше @machinelearning