2011-11-18 115 views
3

我已經GOOGLE了很多關於這一點,我不知道我錯過了什麼。我有一個接觸的形式,使用戶可以與我聯繫:谷歌appengine - 如何配置發送和接收電子郵件

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 = "[email protected]" 
     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不起作用,receive()需要額外的參數,我不知道從哪裏得到。所以當我部署時我不會評論它。 我的腦海裏一團糟。我不知道如何把它放在一起。
當我試圖通過電子郵件發送給自己,我得到這個在我的儀表盤日誌:

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 

你能幫助嗎?

回答

1

由於您無權使用該電子郵件,因此無法通過表單上提交的電子郵件發送。您必須通過連接到他們的Google帳戶來使用您控制的電子郵件或用戶的電子郵件。 http://code.google.com/appengine/docs/python/mail/sendingmail.html本頁說明您可以用來發送電子郵件的電子郵件,只需在第一個代碼塊後面向下滾動即可。

+0

謝謝,我會用我自己的電子郵件地址發送。 – BPm

1

App Engine docs

發件人的電子郵件地址,發件人地址。發件人地址 必須是以下類型之一:

  • 註冊管理員爲應用程序的地址。您可以使用管理控制檯將管理員添加到應用程序。

  • 用Google帳戶登錄的當前請求的用戶地址。您可以使用用戶API確定當前用戶的電子郵件地址。 用戶的帳戶必須是Gmail帳戶,或位於由Google Apps 管理的域中。

  • 任何有效的應用程序的電子郵件接收地址(如[email protected])。

所以,如果您的發件人的電子郵件ID是不是其中之一,你會得到這個錯誤。

+0

= .. =所以這就是爲什麼。謝謝 – BPm

+0

你怎麼能得到一個[email protected]身份證?什麼是xxx和app-id? – rjv

+1

@RajeevS你不需要做任何事情。 xxx表示你可以在那裏找到任何單詞。 APP-ID是您在註冊應用程序時選擇的應用程序ID。例如:如果你註冊了test.appspot.com,你的應用程序ID是'test',你可以發郵件到[email protected]。你不必使用'郵件',你可以使用任何東西。 – pradeek

相關問題