ま、そんなところで。

ニッチな技術系メモとか、車輪を再発明してみたりとか.

(続)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