5

メールボックスに届いたメールを処理するアプリに取り組んでいます。受信メールを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」のコメント付きコードでわかるように、データを正しく取得するためにさまざまな方法 (試行錯誤) を試みましたが、役に立ちませんでした。

誰かがこれを修正するために私を案内してくれませんか!

ありがとう!!!

4

1 に答える 1