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

标签 python google-app-engine

我已使用 --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/

相关文章:

python - 为什么 python gevent 比 serial 慢?

python - 如何使用 PyScripter 调试 Google App Engine 脚本

google-app-engine - golang数据存储获取对象

java - 实体 google 数据存储是否可以具有 "empty"属性?

python - 运行 Apache 时打开 SQLite3 数据库文件的 Django 错误

python - 防止 pandas read_csv 将第一行视为列名的标题

google-app-engine - 有人在 Google App Engine 上尝试过 MongoDB 吗?

java - 如何从一个进程返回到一个前端后端进程?

python - 3D 列表索引 - 如何获取特定 x,y 的 max(z)

如果客户端停止(SIGSTOP),Python TCP 服务器将永远阻止发送给客户端