現在、私は 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
を使用しない限り、おそらくエンコードされています)、 に渡す必要があります。暗号化されたペイロードの存在はおそらく良いトリガーですが、おそらくラッパーは暗号化されたペイロードを含まないものはすべて通過させ、すべてをラッパーに渡す必要があります。gpg
gpg
$subject
余談ですが、 Procmail やルールで定義するものは何もありません。次のようにすることができます:
:0
* ^Subject:[ ]\/[^ ].*
{ subject=$MATCH }
...ここで、角括弧の間の空白はスペースとタブになります。