我已使用 --enable_sendmail=yes
选项启用了 sendmail,如 the GAE docs 中所述。我仍然没有收到任何电子邮件(尽管电子邮件确实出现在日志消息中)。简化的代码如下所示:
from google.appengine.api import mail
SENDER_EMAIL_ADDRESS = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="92f3f6fffbfcd2d3c2c2dbd6bcf3e2e2e1e2fde6bcf1fdff" rel="noreferrer noopener nofollow">[email protected]</a>"
msg = "Test message"
subject = "Test subject"
recipient = "{} <{}>".format('username', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bfcaccdacdd1ded2daffd8d2ded6d391dcd0d2" rel="noreferrer noopener nofollow">[email protected]</a>')
mail.send_mail(sender=SENDER_EMAIL_ADDRESS,
to=recipient,
subject=subject,
body=msg)
我做错了什么?
最佳答案
如果您指定发件人地址,它必须与您的本地计算机相对应。 google 为其开发服务器提供的 Mail Stub 中的 sendmail 处理函数如下所示:
...
try:
child.stdin.write(mime_message.as_string())
child.stdin.close()
...
问题在于传递给 send_mail
方法的发件人地址位于 mime_message
header 中。添加以下行作为 try block 中的第一行会从 mime 消息中删除该 header 。这允许 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
关于python - Sendmail 不适用于本地 GAE 本地开发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792603/