1

Mailgun から Heroku の Django インストールに受信メールを取得するビューをデバッグしようとしています。

ビュー自体は Mailgun ドキュメントから直接取得され、手動で URL を呼び出すと、OK 応答が返されます。

@csrf_exempt
def askfriend_emailresponse(request):
    from_email = "..."
    to_email = "..."
    if request.method == 'POST':
        sender    = request.POST.get('sender')
        recipient = request.POST.get('recipient')
        answer = request.POST.get('stripped-text', '')

        try:
            send_mail("inside post"+str(recipient[recipient.find("+")+1:recipient.find("@")]), answer, from_email, to_email)
        except Exception, e:
            raise e

    return HttpResponse('OK')

また、外部ツール (私はこの目的で Poster を使用しています) を介してその URL に投稿するだけで、200 を取得できます (その@csrf_exemptために を追加する必要がありましたが、今のところは問題ありません)。

ただし、Mailgun ログから、メッセージの転送時に 500 エラーがあることがわかり、Heroku からは、500 の原因となる着信要求があることがわかります。

2013-03-13T09:59:04+00:00 heroku[router]: at=info method=POST path=[url] host=[hostname].herokuapp.com fwd="198.61.253.112" dyno=web.1 queue=0 wait=0ms connect=1ms service=86ms status=500 bytes=102194

1日以上調査に費やした後の私の質問:

1) 何が間違っている可能性があるか (いいことだろう) - 少なくとも同じくらい重要な考え

2) どうすればこれを適切にテストできますか? Mailguns のログは非常に短いため (500 - それだけです!)、Heroku もあまり役に立ちません... また、常に最初に Heroku にデプロイする必要があるのは明らかに非常に遅いため、それが本当に「スマートな」開発方法...(他のすべてのものは明らかにローカルでテストしますが、外部の電子メールがMailgunを介してPOSTを介して送信されるため、ローカルでテストする方法がわかりません)

ありがとう!

4

1 に答える 1

2

私はついに問題が何であるかを理解しました:

1) Mailgun チュートリアルでは、作成したルートの末尾に「/」がありません (例: http://myhost.com/messages ) - ただし、APPEND_SLASH は POST リダイレクトで問題を引き起こしました。解決策は、リダイレクトの最後に単に「/」を追加することです

2) (本番環境でさらに問題が発生する可能性があります) - Django 1.5 では、POST リクエストを許可するドメインを制限する allowed_host 値が導入されたことに注意してください。これは本番環境 (デバッグ = false) でのみ使用されると思いますが、後で問題が発生する可能性があるため、これらも適切に設定してください (ホストとして mailgun.org を許可すると思います)。

手伝ってくれたみんな、ありがとう!

于 2013-03-16T03:54:30.763 に答える