2013-03-31 3 views
1

Предположим, что приложение получило сообщение, которое has attachments (mail_message.attachments). Теперь я хотел бы сохранить сообщение в хранилище данных. Я не хочу хранить приложение там, поэтому я хотел бы сохранить только ключи blobstore. Я знаю, что могу write files to blobstore. У меня есть вопросы:Как сохранить вложение электронной почты в GAE Blobstore?

  1. как извлечь файлы из почтового приложения;
  2. как сохранить исходные имена файлов;
  3. Как хранить клавиши blob в хранилище данных (с учетом того, что одно письмо может содержать несколько вложений, похоже, BlobKeyProperty() не работает в этом случае).

Обновление. Для (1) the following code может быть использован:

my_file = [] 
my_list = [] 
if hasattr(mail_message, 'attachments'): 
    file_name = "" 
    file_blob = "" 
    for filename, filecontents in mail_message.attachments: 
     file_name = filename 
     file_blob = filecontents.decode() 
     my_file.append(file_name) 
     my_list.append(str(store_file(self, file_name, file_blob))) 

ответ

0

Вот что я наконец-то сделать:

class EmailHandler(webapp2.RequestHandler): 
    def post(self): 
     ''' 
     Receive incoming e-mails 
     Parse message manually 
     ''' 
     msg = email.message_from_string(self.request.body) # http://docs.python.org/2/library/email.parser.html 
     for part in msg.walk(): 
      ctype = part.get_content_type() 
      if ctype in ['image/jpeg', 'image/png']: 
       image_file = part.get_payload(decode=True) 
       image_file_name = part.get_filename() 
       # save file to blobstore 
       bs_file = files.blobstore.create(mime_type=ctype, _blobinfo_uploaded_filename=image_file_name) 
       with files.open(bs_file, 'a') as f: 
        f.write(image_file) 
       files.finalize(bs_file) 
       blob_key = files.blobstore.get_blob_key(bs_file) 

blob_key s хранятся в хранилище данных, как ndb.BlobKeyProperty(repeated=True).

0

Вы должны использовать NDB вместо (старого) датастора. В NDB вы можете использовать повторяющиеся и структурированные повторяющиеся свойства для сохранения списка BlobProperties и имен файлов.

См: https://developers.google.com/appengine/docs/python/ndb/properties

+0

Спасибо, я использую NDB (см. Теги). –

Смежные вопросы