我正在尝试从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()
(是的,主题被设置两次......我只尝试在一个地方或另一个地方设置它,但都没有工作。)
提前致谢。
答案 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)