ISO编码的附件名称和python
问题描述:
首先,我没有这台计算机上的代码示例,但我有一个非常相似的示例。ISO编码的附件名称和python
(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”](i belive)编码形式。
上述示例尝试猜测扩展名如果找不到文件名,它只是给它一个文件名。我想要的是文件名。
有没有人处理过这些问题,你做了什么来解决它?
答
我发现这个问题,它是与
mimetypes.guess_extension(part.get_content_type())
并与“图像/ PJPEG”作为内容类型
@美国洛特我已经改变的代码以类似于上述示例的图像,但我增加了这个来解决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"
给出带有编码文件名的电子邮件的示例。该代码适用于我遇到的任何电子邮件。 – nosklo 2009-01-22 19:58:02