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

问题描述:

我已经使用--enable_sendmail=yes选项启用了sendmail,如the GAE docs中所述,并且仍然没有收到任何电子邮件(虽然电子邮件确实出现在日志消息中)。简化的代码如下所示:Sendmail不适用于本地GAE本地开发服务器

from google.appengine.api import mail 

SENDER_EMAIL_ADDRESS = "[email protected]" 

msg = "Test message" 

subject = "Test subject" 

recipient = "{} <{}>".format('username', '[email protected]') 

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

我在做什么错?

如果指定发件人地址,它必须与本地计算机相对应。在邮件存根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

找到