Мне удалось получить почтовые вложения на Amazon S3 от входящей электронной почты GAE, но делает любой знает, что техника получает вложение, как изображение, в blobstore.
Любая справка очень ценилась бы.
Код до сих пор (со справкой от Alex)
upload_url = blobstore.create_upload_url('/upload')
msg = MIMEMultipart()
msg.set_type('multipart/form-data')
msg.set_payload({'file': content})
result = urlfetch.fetch(upload_url, payload=urllib.urlencode(msg), method=urlfetch.POST, headers={'Content-Type': 'multipart/form-data'})
Чтобы получать почту в GAE app, следуйте документам здесь : в частности, вы получите экземпляр класса InboundEmailMessage
с атрибутом attachments
, который, как я цитирую:
список прикрепленных файлов, возможно, пуст. Каждое значение в списке представляет собой кортеж из двух элементов: имени файла и содержимого файла.
Затем в этих документах GAE вы «создаете URL загрузки» и в своем обработчике загрузки (обычно это подкласс BlobstoreUploadHandler ) вы используете get_upload
чтобы получить экземпляры BlobInfo и поместить их метаданные куда-нибудь, что позже позволит вам получить их обратно, если это может потребоваться вашему приложению.
Наконец, вы ПУБЛИКАЕТЕ
данные (которые у вас есть из вложений
, см. Выше) на свой собственный недавно созданный «URL загрузки», например с использованием urlfetch.fetch (с method-POST
и полезной нагрузкой в стандартной кодировке application / x-www-form-urlencoded
для "формы", которую пользователь были бы заполнены, если бы они загружали данные напрямую, что является «нормальным» способом размещения данных в хранилище больших двоичных объектов - например, вы можете использовать urllib.urlencode для подготовки полезной нагрузки).
Самостоятельная POST будет использовать другой экземпляр вашего приложения для «приема» данных в хранилище больших двоичных объектов (в то время как экземпляр, получивший электронное письмо, ожидает, поскольку выборка
является синхронной).