Расшифровать входящую pgp почту с помощью procmail
В настоящее время у меня работает сервер Postfix, который доставляет входящую почту через procmail. Это прекрасно работает, но теперь я хочу расшифровать любую входящую почту, которая автоматически шифруется с помощью pgp. Поэтому я создал правило procmail для запуска gnupg.
Это мой текущий.procmailrc:
:0 fw
* ^Subject: encryptme
| /usr/bin/gpg --decrypt | mail -s "ENCRYPTED: $subject" my@email.com
Теперь сообщение успешно расшифровано и отправлено на my@email.com, но с пустой темой (в письме отображается только "ENCRYPTED: ") и с адресом электронной почты сервера в качестве отправителя. И, конечно же, расшифрованное письмо содержит части заголовка письма.
Content-Type: multipart/mixed; boundary="713bkotRlnRGA7FAhJANoI0IsDpX3ws8N"
--713bkotRlnRGA7FAhJANoI0IsDpX3ws8N
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: quoted-printable
Just a test.
--713bkotRlnRGA7FAhJANoI0IsDpX3ws8N--
Есть ли возможность дешифровать входящую почту таким способом автоматически и "очистить" (только дешифрованное сообщение) без дополнительного программного обеспечения, такого как GNU Anubis? И каково хорошее правило для procmail запускать программу (в теме)?
Я надеюсь, что этой информации достаточно, чтобы кто-нибудь мне помог.
1 ответ
В очень многих словах, gpg --decrypt
хочет файл, а не сообщение электронной почты. Сообщение электронной почты обычно состоит из нескольких частей MIME (ваш пример показывает multipart/mixed
только с одной частью тела, но концепция остается в силе), которые не являются файлами. Вам нужно передать только зашифрованную полезную нагрузку, а не контейнер MIME, чтобы gpg
или найти обертку или вариант, который помогает gpg
Разобрать обертку MIME.
Быстрый поиск в Google показал простую оболочку Perl MIME, которая делает это:
В случае плохой связи, повторное изобретение того же самого колеса не должно быть серьезной проблемой; вам в основном нужно идентифицировать часть MIME, которая содержит зашифрованную полезную нагрузку, расшифровать ее (это, вероятно, base64
закодирован, если он не использует gpg
"ASCII armor") и передайте его gpg
, Существование зашифрованной полезной нагрузки, вероятно, является хорошим триггером, но, возможно, оболочка должна просто пропустить все, что не содержит зашифрованной полезной нагрузки, и вы бы передали все оболочке.
Тангенциально, нет ничего, что определяет $subject
в Procmail или в ваших правилах. Вы можете сделать что-то вроде этого:
:0
* ^Subject:[ ]\/[^ ].*
{ subject=$MATCH }
... где пробел между квадратными скобками должен быть пробелом и символом табуляции.