私は email.Message クラスと gnupg ライブラリを使用しています:
1 - Twisted imap4 クライアントから取得した電子メール文字列を解析します。
2 - 添付ファイル .pgp を取得します
3 - 復号化します。
次のように、典型的なメール コンテンツを復号化できます。
-----BEGIN PGP MESSAGE-----
Version: PGP 9
(...)
-----END PGP MESSAGE-----
しかし、執着は本当に私の人生を地獄にしています。
さて、私はさまざまな方法を試しましたが、最も論理的な方法は次のとおりです。
message = email.message_from_string(content)
if message.is_multipart():
attachment = message.get_payload(1)
gpg = gnupg.GPG(gnupghome=settings.PGP_PATH)
return gpg.decrypt_file(attachment.get_payload(), passphrase=settings.PGP_PASSPH)
添付変数の最初の行は次のとおりです。
From nobody Mon Oct 15 18:54:12 2012
Content-type: application/octet-stream;
name="No_Norm_AMLT_908_1210201201.txt.pgp"
Content-Disposition: attachment; filename="No_Norm_AMLT_908_1210201201.txt.pgp"
Content-Transfer-Encoding: base64
そして、すべての暗号化されたもの。
とにかく……なんか変だな、なんか腑に落ちない。通常のメール クライアント ソフトウェア (Thunderbird など) から添付ファイルをダウンロードすると、バイナリのような .pgp ファイルが生成され (プレーン テキスト エディターで編集すると奇妙な文字が表示されます)、bash コマンドを使用して復号化できます。
gpg --decrypt No_Norm_AMLT_908_1210201201.txt.pgp
email.Message クラスと gnupg を使用して同じ結果 (復号化されたファイル) を取得する方法がわかりません。添付ファイルのペイロードをファイルに保存しようとしましたが、これは Thunderbird からダウンロードしたものとは異なります。復号化しないで、StringIO に入れてみました。また、base64 でエンコードしました。
gpg から受け取るメッセージは次のとおりです。
[GNUPG:] NODATA 1
[GNUPG:] NODATA 2
gpg: decrypt_message failed: eof
ありがとうございました!