В настоящее время у меня запущен сервер Postfix, который доставляет входящую почту через procmail. Он работает нормально, но теперь я хочу автоматически расшифровывать любую входящую почту, зашифрованную с помощью pgp. Поэтому я создал правило procmail для запуска gnupg.
Вот мой текущий .procmailrc:
:0 fw
* ^Subject: encryptme
| /usr/bin/gpg --decrypt | mail -s "ENCRYPTED: $subject" [email protected]
Теперь письмо успешно расшифровано и отправлено[email protected]но с пустой темой (в письме указано только "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.
Быстрое гугление нашло простую оболочку Perl MIME, которая делает следующее:
В случае, если ссылка испортится, повторное изобретение того же велосипеда не должно стать серьезной проблемой; вам в основном нужно определить часть MIME, которая содержит зашифрованную полезную нагрузку, расшифровать ее (она, вероятно, base64
закодирована, если только она не использует gpg
собственную "броню ASCII") и передать ее в gpg
. Наличие зашифрованной полезной нагрузки, вероятно, является хорошим триггером, но, возможно, оболочка должна просто пропускать все, что не содержит зашифрованной полезной нагрузки, и вы бы скармливали все обертке.
По касательной, нет ничего, что определяет $subject
в Procmail или в ваших правилах. Вы можете сделать что-то вроде этого:
:0
* ^Subject:[ ]\/[^ ].*
{ subject=$MATCH }
... где пробел между квадратными скобками должен быть пробелом и табуляцией.