From 7f67390fdbb9f5c147c9d86d10299ed59f1b0850 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sun, 8 Dec 2019 18:44:32 +0300 Subject: [PATCH] =?utf8?q?=D0=A5=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= =?utf8?q?=20=D0=B4=D0=B5=D1=88=D0=B8=D1=84=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?utf8?q?=D0=BD=D1=8B=D1=85=20PGP=20=D0=BF=D0=B8=D1=81=D0=B5=D0=BC=20?= =?utf8?q?=D0=BD=D0=B0=20=D0=B4=D0=B8=D1=81=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Почту я храню на зашифрованном разделе диска. Поэтому в 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-ами, ничего лишнего не затрагивающий. -- 2.50.0