Расшифровать входящую 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 }

... где пробел между квадратными скобками должен быть пробелом и символом табуляции.

Другие вопросы по тегам