从GAE发送邮件的困难

时间:2011-04-01 02:32:22

标签: python google-app-engine email

我正在尝试从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 个答案:

答案 0 :(得分:1)

试试这个:

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'))

答案 1 :(得分:0)

我不知道是不是会让你失望...但发件人应该是这样的:

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

你错过了'&lt;'对于发件人。有时它会在实际错误的下游抛出错误。

另外,请确保admin_address@gmail.com是已添加为该应用的开发者的Google帐户。

答案 2 :(得分:0)

我认为您可以这样发送,确保发件人是该应用的管理员

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)