Microsoft MHTML 分解

MS-WORD で保存したという mht ファイルを受け取ったのだが、 手元の Word for Mac 2011 で開けない。

../../../_images/word_error.png

中身を less で覗いても、壊れているようには見えなかったので、 ソフトウェアの問題なのであろう。WORD に拘る必要も無いし、 簡単に使える分解ツールは無いものかとググっても、めぼしいものが見つからず、 自分で書いた方が早そうだったので、そうした。

#!/usr/bin/python
# encoding: utf-8

import os
import sys
import errno
import email

# ファイル名が格納されているフィールド
TOJ = 'Content-Location'

# 抽出するべきデータ型
TYPES = {"text/html", "image/jpeg"}

# 出力先
OUTDIR = "mht_contents"

# 出力先作成
try:
  os.mkdir(OUTDIR)
except OSError, e:
  if e.errno != errno.EEXIST:
    raise RuntimeError

# ファイル読み込み
with open(sys.argv[1], "r") as fin:
  msg = email.message_from_file(fin)

# マルチパート解析
for mpart in msg.get_payload():

  # content type で選別
  if mpart.get_content_type() not in TYPES:
    continue

  # 出力ファイル名を抽出
  fn = mpart[TOJ].split("/")[-1]

  # ファイル出力
  with open(OUTDIR + "/" + fn, "wb") as fout:
    fout.write(mpart.get_payload(decode=True))

ファイルで欲しければ ここ から持っていくと良い。 第一引数で mht ファイル名を与えるようになっている。 まぁ、見れば解るか。Python 3 で動くかどうかは知らない。