まず第一に、このコンピューターにはコード例がありませんが、非常によく似た例があります。
( 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"] 内にエンコードされた形式です (私は信じています)
上記の例では、拡張子を推測しようとしますが、ファイル名が見つからない場合は、ファイル名の一部を与えるだけです。私が欲しいのはファイル名です。
このような問題に対処した人はいますか?それを修正するために何をしましたか?