Что: 7f67390fdbb9f5c147c9d86d10299ed59f1b0850
Когда: 2019-12-08 18:44:32+03:00
Темы: mail tip
Хранение дешифрованных PGP писем на диске Почту я храню на зашифрованном разделе диска. Поэтому в Mutt я указываю что исходящие письма не нужно сохранять в зашифрованном виде. Это удобно тем, что позволяет системам индексации работать с данными. А вот входящие письма уже лежат в зашифрованном виде. А я хочу дополнительно хранить и в дешифрованном, но с сохранением подписи, в идеале, чтобы индексация работала. Раньше из-за относительно небольшого количества шифрованных писем я не парился с этим и про себя более менее помнил что где находится. Сейчас стало совсем геморройно. С ходу в Интернете нашёл только один Perl скрипт сохраняющий дешифрованные версии. В основном то люди как-раз ищут прямо противоположное -- как сохранить в PGP. Но внезапно обнаружил что в Mutt есть decrypt-copy команда делающая то, что мне надо: сохраняет дешифрованную копию письма. Метим все PGP зашифрованные письма (T ~G), применяем эту команду, указываем mailbox, там оказывается копия. Однако, в письмах где отдельной частью идут зашифрованные заголовки (To/From/Subject), в основном заголовке письма получаются сдублированные поля. Subject: Encrypted subject, а потом пониже будет уже настоящий subject. Что сбивает index с толку. Решил вот таким вот Python скриптом просто удалять дубляжи. Применяем к файлам в maildir-е и проблемы нет. Их дальше можно положить в основной maildir. Не потеряется, так как Message-ID остаётся незатронутым и сообщения связываются между собой Mutt-ом. import sys fn = sys.argv[1] out = sys.argv[2] with open(fn, "rb") as fd: lines = fd.read().split(b"\n") def dup(lines, what): idx = [] met = False for i, line in enumerate(lines): if line == "": break if met: if line.startswith(b" "): idx.append(i) continue else: met = False if line.startswith(what): if len(idx) == 0: idx.append(i) met = True else: return [l for n, l in enumerate(lines) if n not in idx] return lines lines = dup(lines, b"To") lines = dup(lines, b"From") lines = dup(lines, b"Subject") with open(out, "wb") as fd: fd.write(b"\n".join(lines)) На качество кода не претендую: буквально на коленках собранный скрипт, но, судя по diff между maildir-ами, ничего лишнего не затрагивающий.
Сгенерирован: SGBlog 0.34.0