Сложности с отправкой почты из GAE - PullRequest
0 голосов
/ 01 апреля 2011

Я пытаюсь отправить электронное письмо из Google App Engine.

Всякий раз, когда я пытаюсь отправить, я получаю «Отсутствует ошибка субъекта».

Когда я запускаю код на сервере разработки, кажется, он работает нормально - вывод на консоль выглядит правильно, и я попадаю на ожидаемую страницу. Но когда я загружаю его и запускаю, я получаю:

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 636, in __call__
    handler.post(*groups)
  File "/base/data/home/apps/spam-tool/1.349401522260793315/spam-tool.py", line 34, in post
    body=cgi.escape(self.request.get('content')))
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/mail.py", line 297, in send_mail
    message.send(make_sync_call)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/mail.py", line 799, in send
    raise ERROR_MAP[e.application_error](e.error_detail)
BadRequestError: Missing subject

Но определенно есть тема.

Код, который я использую:

> message = mail.EmailMessage(sender="admin_address@gmail.com>",
            subject="test")
        message.subject=self.request.get('content')
        message.to = addr_to_send_to
        message.body = self.request.get('content')
        message.send()

(Да, объект задан дважды ... Я пытался установить его только в одном месте или в другом, и ни один не работал.)

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 01 апреля 2011

Попробуйте это:

def email_member(request):
  to_addr = request.POST.get('email_to')

  if not mail.is_email_valid(to_addr):
    # Return an error message...
    pass
  else:
    # note we can also send html email, e.g. html='<html><head></head><body>Hello world</body><html>'
    mail.send_mail(
      sender='admin@yourdomain.com',
      to=to_addr,
      subject=request.POST.get('email_title'),
      body=request.POST.get('email_body'))

Я предлагаю вам также отправить свою электронную почту в очереди задач, чтобы вы могли настроить что-то вроде этого, вы могли бы передать уникальный параметр, чтобы вы с меньшей вероятностью были взломаны.

def mail_member_information(email_to, email_title, email_body):
  taskqueue.add(
    url = 'email_message',
    params =
    {
      'email_to': email_to,
      'email_title': email_title,
      'email_body': email_body,
      'valid_guid': 'ae9e34ca-a2c5-476e-b8be-72d807e3dc6b'
    }
  )

Если вы просто хотите отправить администраторам, используйте это:

mail.send_mail_to_admins(sender='admin@yourdomain.com', subject=request.POST.get('email_title'), body=request.POST.get('email_body'), html=request.POST.get('email_body'))

0 голосов
/ 01 апреля 2011

Я думаю, что вы можете отправить вот так, убедитесь, что отправитель является администратором приложения

from google.appengine.api import mail
mail.send_mail(sender="something@gmail.com",

                 to=email_valid.email,
                 subject="Please validate your email",
                 body=body_text,
                 html=htmlbody_text)
0 голосов
/ 01 апреля 2011

Я не знаю, отбрасывает ли вас это ... но отправитель должен быть таким:

sender = '<admin_address@gmail.com>',

вам не хватает «<» для отправителя. Иногда выдает ошибку ниже по потоку того места, где находится фактическая ошибка. </p>

Кроме того, убедитесь, что admin_address@gmail.com - это учетная запись Google, добавленная в качестве разработчика для этого приложения.

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