通过Google App Engine接收电子邮件时获取有效图像的Mimetype

时间:2011-03-29 14:24:37

标签: python google-app-engine email mime-types

当我通过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。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

对不起,但我不确定我是否完全不知道这个问题。

您可以使用内置模块 mimetypes 来识别Mimetype。但是此模块上的函数仅在文件名上搜索mimetypes,因此用户可以上传重命名为text.jpg的text.xml并将其解释为图像。

如果您只使用图像,也许您可​​以尝试将文件作为PIL对象打开以识别它是否是有效文件,并在失败时处理异常。

答案 1 :(得分:0)

messageInboundEmailMessage的一个实例,它有一个方法'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模块。