google appengine - как настроить отправку и получение электронной почты - PullRequest
3 голосов
/ 18 ноября 2011

Я много гуглил по этому вопросу и не знаю, что мне не хватает.У меня есть форма контакта, чтобы пользователи могли связаться со мной:

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 не работает, для 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

Не могли бы вы помочь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Вы не можете отправить сообщение, отправленное в форме, поскольку у вас нет прав на использование этого сообщения. Вы должны либо использовать электронную почту, которой вы управляете, либо электронную почту пользователя, подключившись к его учетной записи Google. http://code.google.com/appengine/docs/python/mail/sendingmail.html На этой странице указывается, с какого электронного письма вы можете отправлять электронные письма, просто прокрутите вниз сразу после первого блока кода.

1 голос
/ 18 ноября 2011

Из документов App Engine

Адрес электронной почты отправителя, адрес От.Адрес отправителя должен быть одного из следующих типов:

  • Адрес зарегистрированного администратора приложения.Вы можете добавить администраторов в приложение с помощью Консоли администрирования.

  • Адрес пользователя для текущего запроса, зарегистрированного с использованием учетной записи Google.Вы можете определить адрес электронной почты текущего пользователя с помощью API пользователя.Учетная запись пользователя должна быть учетной записью Gmail или находиться в домене, управляемом Службами Google.

  • Любой действительный адрес электронной почты для приема приложения (например, xxx@APP-ID.appspotmail.com).

Так что, если ваш электронный адрес отправителя не является одним из них, вы получите эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...