google appengine - 如何配置发送和接收电子邮件

时间:2011-11-18 04:15:16

标签: python google-app-engine

我已经搜索了很多内容,我不知道我错过了什么。我有联系表格,以便用户与我联系:

contact.html

<form id="contact" action="" method="post" name="contact">
    <label for="subject">Subject:</label>
    <input id="id_subject" type="text" name="subject" maxlength="100">
    <label for="email">Email:</label>
    <input id="id_email" type="text" name="email">
    <label for="message">Message:</label>
    <textarea id="id_message" rows="10" cols="40" name="message"></textarea>
    <input type="submit" value="Submit">
</form>

的app.yaml

inbound_services:
- mail    
- url: /_ah/mail/.+
  script: main.py
  login: admin

main.py

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template
from google.appengine.api import mail
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler 

class Contact(webapp.RequestHandler):
    def get(self):  
        self.response.out.write(template.render('contact.html', {}))
    def post(self):
        sender = self.request.get("email")
        subject = self.request.get("subject")
        body = self.request.get("message")          
        message = mail.EmailMessage(sender=sender, subject=subject)
        message.to = "myemail@gmail.com"
        message.body = body
        message.send()

class LogSenderHandler(InboundMailHandler):
    def receive(self, mail_message):
        logging.info("Received a message from: " + mail_message.sender)

def main():
    application = webapp.WSGIApplication([('/contact', Contact),  
                                           LogSenderHandler.mapping()],
                                           debug=True)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

班级LogSenderHandler不起作用,接收()需要额外的参数,我不知道从哪里得到。所以我在部署时不会发表评论。 这让我感到很乱。我不知道怎么把它放在一起 当我尝试通过电子邮件发送给自己时,我会在仪表板上记录下来:

Unauthorized sender
Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
    handler.post(*groups)
  File "/base/data/home/apps/s~projectname/1.354692671370598794/main.py", line 27, in post
    message.send()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/mail.py", line 894, in send
    raise ERROR_MAP[e.application_error](e.error_detail)
InvalidSenderError: Unauthorized sender

你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

来自App Engine docs

  

发件人的电子邮件地址,发件人地址。发件人地址   必须是以下类型之一:

     
      
  • 应用程序的注册管理员的地址。您可以使用“管理”将管理员添加到应用程序   控制台。

  •   
  • 使用Google帐户登录的当前请求的用户地址。您可以使用Users API确定当前用户的电子邮件地址。该   用户的帐户必须是Gmail帐户,或者位于由其管理的域中   Google Apps。

  •   
  • 该应用的任何有效电子邮件接收地址(例如xxx@APP-ID.appspotmail.com)。

  •   

因此,如果您的发件人电子邮件ID不是其中之一,则会收到此错误。

答案 1 :(得分:1)

您无法通过表单上提交的电子邮件发送,因为您无权使用该电子邮件。您必须使用您控制的电子邮件或用户的电子邮件才能连接到他们的Google帐户。 http://code.google.com/appengine/docs/python/mail/sendingmail.html此页面显示了您可以用来发送电子邮件的电子邮件,只需在第一个代码块后面向下滚动即可。