Получите Mimetype для действительного изображения при получении электронной почты через Google App Engine - PullRequest
1 голос
/ 29 марта 2011

Как я могу получить mimetype из вложения при получении электронного письма через Google App Engine?

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 голосов
/ 31 марта 2011

message является экземпляром InboundEmailMessage , у которого есть метод «тел».body возвращает список кортежей (content_type, payload), поэтому вы можете перебирать все тела следующим образом:

for content_type, payload in message.bodies():
  # Do something with each part of the message

В качестве альтернативы вы можете передать mimetype в message.bodies, который будет возвращать только части сэтот mimetype.

Вы также можете определить mimetype по имени файла или использовать модуль mimetypes, как предлагает Немет.

0 голосов
/ 29 марта 2011

Извините, но я не уверен, полностью ли я понял вопрос.

Вы можете использовать встроенный модуль mimetypes для идентификации Mimetype. Но функции этого модуля будут искать mimetypes только по имени файла, поэтому пользователь сможет загрузить text.xml, переименованный в text.jpg, и будет интерпретирован как изображение.

Если вы работаете только с изображениями, возможно, вы можете попытаться открыть файл как объект PIL, чтобы определить, является ли он допустимым файлом, и поработать с исключением, если он потерпит неудачу.

...