受信PGPメールをprocmailで復号化する

受信PGPメールをprocmailで復号化する

現在、私は procmail 経由で受信メールを配信する Postfix サーバーを実行しています。これは問題なく動作しますが、今度は pgp で暗号化された受信メールを自動的に復号化したいと考えています。そこで、gnupg をトリガーする procmail ルールを作成しました。

これは私の現在の .procmailrc です:

:0 fw
* ^Subject: encryptme
| /usr/bin/gpg --decrypt | mail -s "ENCRYPTED: $subject" [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は電子メール メッセージではなくファイルmultipart/mixedを必要とします。電子メール メッセージは通常、ファイルではない複数の MIME 部分 (例では と 1 つの本文部分のみを示していますが、概念は変わりません) で構成されます。 に渡す必要があるのは、MIME コンテナではなく、暗号化されたペイロードだけです。または、 MIME ラッパーの解析にgpg役立つラッパーまたはオプションを見つける必要があります。gpg

グーグルで簡単に検索すると、次のような簡単な Perl MIME ラッパーが見つかりました。

リンクが壊れた場合、同じ車輪をもう一度発明することは大きな課題ではないはずです。基本的には、暗号化されたペイロードを含む MIME 部分を識別し、それをデコードし ( の独自の「ASCII アーマー」base64を使用しない限り、おそらくエンコードされています)、 に渡す必要があります。暗号化されたペイロードの存在はおそらく良いトリガーですが、おそらくラッパーは暗号化されたペイロードを含まないものはすべて通過させ、すべてをラッパーに渡す必要があります。gpggpg

$subject余談ですが、 Procmail やルールで定義するものは何もありません。次のようにすることができます:

:0
* ^Subject:[    ]\/[^   ].*
{ subject=$MATCH }

...ここで、角括弧の間の空白はスペースとタブになります。

関連情報