(続)S/MIMEメールのsmime.p7mをOpenSSLで開く(multipartの分離)
の続き.
smime.p7mに含まれている添付ファイルも気になって仕方がない
Gmailに添付されたsmime.p7m, smime.p7sに添付ファイルが含まれている場合は 、添付ファイルを全て含むMIME multipart形式のテキストがデコードされます.
この状態でもメール本文だけは何とか読めるんですが、添付ファイルはそれぞれbase64エンコードされてて見るにはもうひと手間必要です.
これをうまく分離することができればメールソフト無しでS/MIMEの閲覧くらいはできるようになるなぁ・・と.
smime.p7mに含まれている添付ファイルも分離してみよう
検討の方向としては、
- なるべくPCを選ばず初期の環境で利用できること(プリインストール限定)
- opensslで復号・検証して復号化したmultipartメッセージをとりあえず前提とする
といったところでしょうか.
でも、添付ファイルはちょっと厄介です.
使われているエンコード方式に従ってデコードし、適切な拡張子で個別のファイルへ復元しなければなりません.
いろいろ調べてみた所、pythonのemailパッケージが使えそうです.
さっそくemailパッケージのサンプルコードを参考にしてスクリプトを作ることにします.
その結果・・
程なく完成.
サンプルが充実してるので助かりました.
Github : mpsep (MIME MultiPart Separator)
multipertのテキストをメール本文と添付ファイルへ復元するスクリプトです.
openssl コマンドにつなげて以下のように使います.
# 復号化→署名検証→メールと添付ファイル分離 openssl smime -decrypt -in smime.p7m -inform der -inkey {自分の秘密鍵} | \ openssl smime -verify -inkey {自分の秘密鍵} -noverify | \ mpsep.py -d {添付ファイル出力先Directory}
これで目論見どおり、OpenSSLとmpsepで暗号化メッセージを完全に閲覧できちゃいました.
コマンド全体をスクリプト化すれば、smime.p7mからメールを開くまでは1コマンドで実現できそうですね.
ようやく出張先でsmime.p7mが気になって仕方がない・・という問題からは開放されたぜ、ってことで。
参考情報
19.1. email — An email and MIME handling package — Python 3.6.14 documentation
19.1.8. email: Examples — Python 3.6.14 documentation