attachmentsにはファイル名とEncodedPayloadが格納されている。
画像ファイル(バイト文字列)にするにはデコードしなければならない。
下記のプログラム例ではメールでJPEG画像を添付して送ると、キャッシュに保存されて /email_view/ファイル名 で見ることが出来ます。
しかし、TS-LCAMはSMTPのポート設定が出来ないようでOP25BのISPではメールが送れないようだ。
#!/usr/bin/env python # -*- coding: utf-8 -*- # email_unpack2.py 2011.2.5 import logging from google.appengine.api import memcache from google.appengine.ext import webapp from google.appengine.ext.webapp.mail_handlers import InboundMailHandler from google.appengine.ext.webapp.util import login_required from google.appengine.ext.webapp.util import run_wsgi_app class email_view(webapp.RequestHandler): @login_required def get(self, filename): if filename: image_data = memcache.get('filename_' + filename) if image_data: self.response.headers['Content-Type'] = "image/jpeg" self.response.out.write(image_data) return self.error(404) class email_unpack(InboundMailHandler): def receive(self, mail_message): path = self.request.path logging.info("path: " + path) logging.info("Received a message from: " + mail_message.sender) if hasattr(mail_message, 'attachments'): for filename, content in mail_message.attachments: image_data = content.decode() logging.info("filename: %s, size: %d" % (filename, len(image_data))) memcache.set('filename_' + filename, image_data, time=60) application = webapp.WSGIApplication([ ('/email_view/(.*)', email_view), email_unpack.mapping() ], debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()
0 件のコメント:
コメントを投稿