Это документация к пакету yandmail (версия 0.3). Побудительным мотивом написания данного пакета (= Yandex Mail) явилась сложность найти нужное письмо при дискуссии со знакомым - дискуссия ветвилась, и было проблемой найти, о чём шла речь в самом начале. Пока почта реализовывалась чисто почтовыми программами, проблем не было - можно было скачать все письма, при необходимости - найти нужное по подстрокам и т.д. С переходом на интернет-почту такое стало невозможным. Попытки использовать программы, работающие по протоколам POP3/SMTP, оказались безуспешными - они сбоили. В связи с этим было сочтено желательным написать программы, обеспечивающие: - Выделение из сохранённых страниц со списками входяших или исходящих писем существенной информации. - Выделение из таких выжимок информации о переписке с конкретным адресатом. - Для сохранённых писем - модификацию даты файла и его имени (чтобы по имени был ясен адресат и дата письма). Важная проблема здесь заключается в том, что для языка HTML (HyperText Markup Language) разрешается, чтобы открывающиеся и закрывающиеся тэги были несбалансированы, поэтому программа должна иметь вид подпрограмм реакции на нахождение в анализируемом документе тех или иных открывающихся или закрывающихся тэгов с параметрами. В данном случае использован библиотечный модуль HTMLParser, рассчитанный именно на такую обработку. В данном случае подпрограммы, ответственные за выделение из *.htm повторяющихся участков (в данном случае - описаний писем), вынесены в модуль parser7.py, а специфика Yandex Mail'а - в модуль specif.py (чтобы легче было по аналогии напсать разбор списков писем на других почтовых серверах). Головная программа - test7.py . Так из сохранённого списка писем в виде *.htm получаются описания вида in080228.htm 2016-02-28 09:50:08 nr = 26 aria1 = Sender: Bob date1 = Received Jan., 30 at 18:32 prefix = Re: subject = майдан firstline = Я не вправе давать тебе советы личного характера ... . Далее формируются списки писем для выбранного адресата (см. исходники и комментарии в них). Проблема - для последнего года на Yandex Mail'е год не указывается (!), и его приходится "подсказывать". Получается список вида: ----- + in080228 23 / 2016-01-31 10:10 / <Bo / Занятно... / МВД ФРГ ... + in080228 26 / 2016-01-30 18:32 / <Bo / майдан / Я не вправе ... + se010227 18 / 2016-01-29 21:50 / >Bo / майдан / XXX, добрый ... + in090228 3 / 2016-01-29 09:37 / <Bo / майдан / Да Игорь! Никак ... ----- ; символы '+' проставляются пользователем вместо минусов и означают, что письмо сохранено; '<' и '>' - от адресата или адресату. А реально список файлов (при просмотре под Far'ом etc.) выглядит по типу 2016-01-31 10:10 1112 160131_1010Bo.ot 2016-01-30 18:32 5100 160130_1832Bo.ot 2016-01-29 21:50 4579 160129_2150Bo.to 2016-01-29 09:37 2323 160129_0937Bo.ot Описания переводятся из кодировки utf-8 в cp866, при этом используется специфика версии Питона 2.7. Текущая (2016,3,15) методика работы с пакетом yandmail (= Yandex Mail): - Сохраняем списки писем за нужные даты; рекоменд. имена - in860315.htm..i1500315.htm, se100315.htm..se200315.htm; in/se - inbox/sent, затем "номер ящика" (= номер, выводящийся в низу страницы в окружении "Pages Previous Next"), затем - дата сохранения ящика (в примере - 03 месяц, 15 число = 15 марта; т.к. по мере появления новых или удаления старых писем для конкретного письма номер ящика меняется, дублирование даты в имени облегчает контроль). - Запускаем скрипт типа alles.sh вида for x in in*.htm se*.htm; do echo $x ./test7.py $x >/dev/null done - для каждого *.htm создаётся соотв-щий *.out . - Переносим *.out в отдельный каталог (напр., perepisk/yandmail/boxes/out). - Если имелись ранее полученные *.out, реком. провер. перекрытие времён, за к-рые получены списки писем; для этого удобно по типу sokr1.py in030228.out 2016 (2016 - "подсказываемый год") из *.out получить более обозримые *.lst, и сравнивать уже их. - Выборка писем к выбраннму пользователю осущ. по типу: - файл wydel.py копируем в каталог с файлами *.out; - в копии подстраиваем imena=['Bob'] # imena=['Родион'] - задаём список фрагментов имён, при наличии хотя бы одного из к-рых в полях From/To программа считает, что это нужный адресат; - поср-вом прог-мы spisqsci.py создаём спис. ящиков; он создаётся под именем qsxiki_.py; - копир. туда же ym_wspomo.py и запускаем копию wydel.py; выборка переписки с указанным адресатом создаётся под именем result.txt (реком. его переименовать, чтобы было ясно, к какому адресату он относится). - Сравниваем полученную выборку с полученной ранее и вручную в редакторе объединяем их, удаляя повторы и сохраняя пометки '+' для сохранённых писем. - Сохранение писем: - откываем письмо в браузере, копируем по Ctrl+a, Ctrl+c, Ctrl+v; сохр. под любым именем; - реком. перенести входящие и исходящие файлы в разные каталоги, чтобы не запутаться с ot/to; - запускаем по типу: ym_ftime.py Bo to 2015 150222.txt ; 'Bo' - 2-букв. идентификатор адресата (напр., 'Bo' ← 'Bob ...'); 'to' - 'ot' или 'to' - от него или ему; '2015' - год - на случай, когда в письме в поле даты он не указан; при этом дата меняется, но переименование не производится, вместо этого создаётся tempor.sh с командами переименования; - после изменения дат одного или неск. писем запускаем полученный tempor.sh; файлы получ. с именами типа 150222_1444Bo.to 150910_0841Bo.ot - дата и время, адресат, от него или ему. - Далее вручную в списке писем (бывшем result.txt) помечаем, какие письма сохранены. Адрес для скачивания: http://aravidze.narod.ru/u1/yandmail_0.3.zip . Адрес для обратной связи: a r a v i d z e @ y a n d e x . r u . (Конец документации).