メールボックスに届いたメールを処理するアプリに取り組んでいます。受信メールをmyappに転送するようにメール設定を変更しました。myappに到達したメールは、ハンドラー スクリプト (" handle_incoming_email.py ") にルーティングされ、そこで処理されます。私のapp.yamlファイルは次のようになります
app.yaml
application: myapp
version: 1-1
runtime: python27
api_version: 1
threadsafe: false
default_expiration: "360d"
handlers:
- url: /_ah/mail/.+
script: myapp/utils/handle_incoming_email.py
メール ハンドラー スクリプトを以下に示します。
handle_incoming_email.py
import logging
import urllib
import base64
import traceback
from google.appengine.ext import webapp
from google.appengine.ext import blobstore
from google.appengine.api import urlfetch
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
class ReceiveEmail(InboundMailHandler):
def receive(self, message):
try:
for filename, filecontents in message.attachments:
if filecontents.encoding:
# data = filecontents
data = filecontents.decode()
# data = filecontents.payload
# data = filecontents.payload.decode()
# data = base64.b64decode(filecontents.decode())
# data = base64.b64decode(filecontents.payload)
# data = base64.b64decode(filecontents.payload.decode())
upload_url = blobstore.create_upload_url('http://myapp.appspot.com/settings/saveItem/')
form_fields = {'field_name': data}
form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url=upload_url,
payload=form_data,
method=urlfetch.POST,
headers={'Content-Type': 'application/x-www-form-urlencoded'})
logging.info(result)
except Exception, e:
traceback.print_exc()
application = webapp.WSGIApplication([ReceiveEmail.mapping()], debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
私の要件は、添付ファイル付きの各メールに対応するエンティティを作成することです。このためには、メールの添付ファイルを解析してブロブストアにアップロードする必要があります。ただし、添付ファイルをブロブストアにアップロードしようとすると、次のエラーが発生します。
リクエストのコンテンツ タイプは、この URL では受け入れられません。
「handle_incoming_email.py」のコメント付きコードでわかるように、データを正しく取得するためにさまざまな方法 (試行錯誤) を試みましたが、役に立ちませんでした。
誰かがこれを修正するために私を案内してくれませんか!
ありがとう!!!