当我通过Google App Engine收到电子邮件时,如何从附件中获取mimetype?
class ReceiveEmail(InboundMailHandler):
def receive(self,message):
sender = parseaddr(message.sender)[1]
receiver = parseaddr(message.to)[1]
# Attachments
try:
if message.attachments :
# Attachments Image
for a in message.attachments:
t = a[0].split('.')
t = t[len(t)-1].lower()
if t == 'png' or t == 'jpg' or t == 'jpeg' or t == 'gif':
logging.info('Image is correct')
else:
logging.info('Image is wrong')
except:
# nothing
我必须知道电子邮件中的附件是否真的是图像?如果我不检查这个,用户可以上传一个text.xml文件,该文件只重命名为text.jpg。
我该如何解决这个问题?
答案 0 :(得分:0)
对不起,但我不确定我是否完全不知道这个问题。
您可以使用内置模块 mimetypes 来识别Mimetype。但是此模块上的函数仅在文件名上搜索mimetypes,因此用户可以上传重命名为text.jpg的text.xml并将其解释为图像。
如果您只使用图像,也许您可以尝试将文件作为PIL对象打开以识别它是否是有效文件,并在失败时处理异常。
答案 1 :(得分:0)
message
是InboundEmailMessage的一个实例,它有一个方法'body'。 body返回(content_type,payload)元组的列表,因此你可以像这样遍历所有的主体:
for content_type, payload in message.bodies():
# Do something with each part of the message
或者,您可以将mimetype传递给message.bodies
,这将只返回具有该mimetype的部分。
您还可以从文件名中确定mimetype,或者使用Nemeth建议的mimetypes
模块。