Sendmail不适用于本地GAE本地开发服务器

时间:2017-10-17 14:28:14

标签: python google-app-engine

我已使用the GAE docs中所述的--enable_sendmail=yes选项启用了sendmail,但仍未收到任何电子邮件(尽管电子邮件确实出现在日志邮件中)。简化代码如下:

from google.appengine.api import mail

SENDER_EMAIL_ADDRESS = "admin@APPID.appspot.com"

msg = "Test message"

subject = "Test subject"

recipient = "{} <{}>".format('username', 'username@gmail.com')

mail.send_mail(sender=SENDER_EMAIL_ADDRESS,
               to=recipient,
               subject=subject,
               body=msg)

我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果指定“发件人”地址,则必须与本地计算机对应。谷歌为其开发服务器提供的Mail Stub中的sendmail处理功能如下所示:

...
try:
    child.stdin.write(mime_message.as_string())
    child.stdin.close()
...

问题是传递给send_mail方法的发件人地址位于mime_message标头中。将以下行添加为try块中的第一行将从mime消息中删除该标头。这允许sendmail使用默认的发件人地址:

mime_message._headers = [x for x in mime_message._headers if x[0] != 'From']

可以在/path/to/google_cloud_sdk/platform/google_appengine/google/appengine/api/mail_stub.py

找到具有此功能的文件