読者です 読者をやめる 読者になる 読者になる

メールに添付された画像etcのファイル名を取得する

Python

メールに添付した画像や動画のファイル名を取得する方法がぱっと思い出せなかったので、調べてみた。

Content-Typeが、

Content-Type: image/gif;
 name="kame.gif"

の時には、get_param('name')を使って取得できる。
あるいは以下のように、

Content-Disposition: inline;
 filename="kame.gif"

Content-Dispositionヘッダーがある場合には、get_filename()を使って取得できる。

僕が使っているDoCoMoの携帯(M702iS)ではContent-Dispositionヘッダーがつかなかったので、普通はget_filename()を使って、get_param('name')にフォールバックするようにしておけばいいのではないだろうか。


以下、テストコード。

# -*- coding: utf-8 -*-
import sys
from email import message_from_file

def main():
    msg = message_from_file(sys.stdin)
    for x in msg.walk():
        content_type = x.get_content_type()
        if content_type.startswith('video') or content_type.startswith('image'):
            filename = x.get_filename() or x.get_param('name')
            blob = x.get_payload(decode=True)
            # ここでimageやvideoを使って何かをする

if __name__ == '__main__':
    main()