Это документация к пакету 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 .
(Конец документации).