ISO编码的附件名称和python

时间:2009-01-22 19:54:51

标签: python email attachment

首先,我没有这台计算机上的代码示例,但我有一个非常相似的示例。

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

第四个。

我的问题在于这段代码

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中,但文件名是在编码形式的部分[“Content-type”](我相信)

以上示例尝试猜测扩展名,如果找不到文件名,则只给它一个部分文件名。我想要的是文件名。

有没有人处理过这类问题,你做了什么来解决它?

1 个答案:

答案 0 :(得分: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"