1

まず第一に、このコンピューターにはコード例がありませんが、非常によく似た例があります。

( http://docs.python.org/library/email-examples.html )

4枚目。

私の問題は、このコードのビットにあります

counter = 1
for part in msg.walk():
    # multipart/* are just containers
    if part.get_content_maintype() == 'multipart':
        continue
    # Applications should really sanitize the given filename so that an
    # email message can't be used to overwrite important files
    filename = part.get_filename()
    if not filename:
        ext = mimetypes.guess_extension(part.get_content_type())
        if not ext:
            # Use a generic bag-of-bits extension
            ext = '.bin'
        filename = 'part-%03d%s' % (counter, ext)
    counter += 1
    fp = open(os.path.join(opts.directory, filename), 'wb')
    fp.write(part.get_payload(decode=True))
    fp.close()

iso または utf でエンコードされたファイル名を持たないメールを取得すると、このコードは正常に機能します。しかし、添付ファイル名が iso エンコードされている場合、ファイル名は get_filename 内にありませんが、ファイル名は part["Content-type"] 内にエンコードされた形式です (私は信じています)

上記の例では、拡張子を推測しようとしますが、ファイル名が見つからない場合は、ファイル名の一部を与えるだけです。私が欲しいのはファイル名です。

このような問題に対処した人はいますか?それを修正するために何をしましたか?

4

1 に答える 1

0

私は問題を見つけました、それは

mimetypes.guess_extension(part.get_content_type())

そして、コンテンツタイプとして「image/pjpeg」を含む画像

@ S.Lott上記の例のようにコードを変更しましたが、pjpegの問題を修正するためにこれを追加しました。

if not filename:
    ext = mimetypes.guess_extension(part.get_content_type())

if not ext:
    guess = part["Content-Type"].split(";")

    if guess[0] == "image/pjpeg":
        guess[0] = "image/jpeg"

    ext = mimetypes.guess_extension(guess[0])

if not ext:
    ext = ".bin"
于 2009-01-26T09:38:26.210 に答える