1

私は Google Apps Engine でウェブサイトをホストしており、Python のメール API を使用して POST データを取得し、メールを送信しようとしています。

これが私のスクリプトです:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import mail

class SendEmail(webapp.RequestHandler):
    def post(self):

        name = self.request.get('name')
        # self.response.out.write(name)
        email = self.request.get('email')
        tempSubject = self.request.get('subject')
        msg = self.request.get('message')

        if name is None:
            self.response.out.write("Error: You did not enter a name.")
        elif email is None:
            self.response.out.write("Error: You did not enter an email.")
        elif tempSubject is None:
            self.response.out.write("Error: You did not enter a subject.")
        elif msg is None:
            self.response.out.write("Error: You did not enter a message.")
        else:
            _subject = "Msg from: " + name + "Re: " + tempSubject

            message = mail.EmailMessage(sender = "foo@bar.com", to = "bar@foo.com", subject = _subject, body = msg, reply_to = email)
            message.send()

def runApp():
    application = webapp.WSGIApplication([('/email', SendEmail)], debug=True)
    run_wsgi_app(application)

if __name__ == '__main__':
    runApp()

サーバー上のログからのトレースバックは次のとおりです。

<type 'exceptions.NameError'>: name 'name' is not defined
Traceback (most recent call last):
  File "/base/data/home/apps/s~alex-young/1.365202894602706277/email.py", line 5, in <module>
    class SendEmail(webapp.RequestHandler):
  File "/base/data/home/apps/s~alex-young/1.365202894602706277/email.py", line 14, in SendEmail
    if name is None:

エラーなしでスクリプトをローカルで実行しましたが、サーバーで実行しようとすると、name宣言した変数が存在しないと主張し続けます。なぜこれが起こるのか分かりますか?

また、その行をコメントアウトすると、email存在しないと表示されます。

4

1 に答える 1

1

結局のところ、インデントにスペースを使用することもあれば、タブを使用することもありました。Pythonはそれが好きではありませんでした。最終的なコードは次のとおりです。

import cgi
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import mail

class SendEmail(webapp.RequestHandler):
    def post(self):
        name = self.request.get('name', '')
        email = self.request.get('email', '')
        tempSubject = self.request.get('subject', '')
        msg = self.request.get('message', '')

        if name is None:
            self.response.out.write("Error: You did not enter a name.")
        elif email is None:
            self.response.out.write("Error: You did not enter an email.")
        elif tempSubject is None:
            self.response.out.write("Error: You did not enter a subject.")
        elif msg is None:
            self.response.out.write("Error: You did not enter a message.")
        else:
            _subject = "Message from: " + name + ", Re: " + tempSubject
            msg += "\n\nI can be reached at "
            msg += email

            message = mail.EmailMessage(sender = "foo@bar.com", to = "bar@foo.com")
            message.subject = _subject
            message.body = msg
            message.send()

            self.redirect('/')

def runApp():
    application = webapp.WSGIApplication([('/email', SendEmail)], debug=True)
    run_wsgi_app(application)

if __name__ == '__main__':
    runApp()
于 2013-02-10T23:15:32.617 に答える