Кто-нибудь работал с вложениями в полученных письмах? Я думал, что вместо того, чтобы загружать изображение, пользователь может отправить его как вложение, которое я могу использовать для загрузки в хранилище данных.
В документации отправка вложений , но я не смог найти никакой документации о получении вложений. На этой странице написано :
1010 * вложений *
Файл вложений для сообщения в виде списка двухзначных кортежей, по одному кортежу для каждого вложения.
Каждый кортеж содержит имя файла в качестве первого элемента и содержимое файла в качестве второго элемента.
Файл вложения должен быть одного из разрешенных типов файлов, а имя файла должно заканчиваться расширением, соответствующим типу. Список разрешенных типов и расширений файлов см. В разделе Обзор: вложения.
Я думаю, это также касается отправки электронной почты.
У меня есть этот код для сохранения изображения в хранилище данных:
class AvatarSave(webapp.RequestHandler):
def post(self):
q = User.all()
q.filter("userEmail =", emailAddress)
qTable = q.fetch(10)
if qTable:
for row in qTable:
avatar = images.resize(self.request.get("img"), 50, 50)
row.avatar = db.Blob(avatar)
db.put(qTable)
else:
self.response.out.write("user not found")
self.redirect('/')
Интуитивно кажется, что message.attachment
вместо "img"
подойдет.
avatar = images.resize(self.request.get(message.attachment), 50, 50)
Что ты думаешь? Благодарю.
Обновление2 (Новый код в ответ на комментарий Ника Джонсона)
class Register(InboundMailHandler):
def receive(self, message):
senderEmail = message.sender
emailTuple = parseaddr(senderEmail)
emailUserName = emailTuple[0]
emailAddress = emailTuple[1]
newAvatar = db.Blob(images.resize(goodDecode(message.attachments[0][1]), 50, 50))
newUser = User(userEmail=emailAddress,
userName=emailUserName,
avatar=newAvatar)
db.put(newUser)
Update1 Проблема решена:
Для записи и для тех, у кого есть тот же вопрос, обратите внимание, что атрибут сообщения *1043* равен attachments
, а не attachment
:
message.attachment
дает AttributeError
AttributeError: 'InboundEmailMessage' object has no attribute 'attachment'
И объект message.attachment
выглядит так:
[('portrait.png', <EncodedPayload payload=#8461006914571150170 encoding=base64>)]
поэтому правильный способ вытянуть часть <EncodedPayload payload=#8461006914571150170 encoding=base64>
-
avatar = images.resize(goodDecode(message.attachments[0][1]), 50, 50)
Исходный код, который я разместил, имеет
avatar = images.resize(goodDecode(message.attachments[1]), 50, 50)
который не работает, очевидно.
Еще раз спасибо jesmith
и Robert Kluin
за ответы.
Обновление0 (относительно ответа jesmith
)
В моем случае я беру изображение "img"
из формы, загруженной пользователем, и записываю его в хранилище данных следующим образом:
for row in qTable:
avatar = images.resize(self.request.get("img"), 50, 50)
row.avatar = db.Blob(avatar)
db.put(qTable)
self.redirect('/')
else:
logging.info("else user not found")
self.redirect('/user-not-found')
В вашем коде это соответствует этому разделу, я считаю:
try:
if hasattr(message, "attachment"):
for a in message.attachments:
msg.attachmentNames.append(a[0])
msg.attachmentContents.append(append(db.Blob(goodDecode(a[1])))
msg.put()
except:
logging.exception("exception decoding attachments in email from %s" % message.sender)
при условии, что в моем случае есть только 1 приложение; как подобрать часть данных вложения?
Это message.attachment[1]
?
avatar = images.resize(message.attachment[1], 50, 50)
является ли message.attachment[1]
частью данных вложения?
Спасибо! * * 1092