【问题标题】:Send an email via. deferred library in Google App Engine通过发送电子邮件。 Google App Engine 中的延迟库
【发布时间】:2017-04-07 12:02:32
【问题描述】:

我正在尝试使用EmailMessage class 发送邮件,正常使用时,如下所示:

message = mail.EmailMessage()

message.sender = ...
message.to = ...
message.subject = ...

message.send()

工作得很好;我按预期收到了电子邮件。

但是,我正在尝试使用 deferred library 将此 email.send() 事件添加到推送队列中:

def email(): 

    message = mail.EmailMessage()

    message.sender = ...
    message.to = ...
    message.subject = ...

// elsewhere
def send_email(message):

   deferred.defer(message.send, _countdown=10)


app = webapp2.WSGIApplication([
    ('/api/email', EmailHandler)
], debug=False)

我可以在管理界面上看到它已成功添加到推送队列中,但我从未真正收到电子邮件或任何类型的失败通知/退回消息。

我见过limitations of the deferred library,但我认为我在这里没有遇到任何人吗?

【问题讨论】:

    标签: python email google-app-engine google-cloud-platform deferred


    【解决方案1】:

    deferred.defer 将函数和要传递给该函数的参数作为参数。当你这样做时:

    deferred.defer(message.send, _countdown=10)
    

    您传递了函数message.send,但来自message 对象的所有数据都丢失了,因此您不再拥有任何数据!

    而是将所有逻辑移到您的 send_email 函数中:

    def send_email(from, to, subject, body): 
    
        message = mail.EmailMessage()
    
        message.sender = ...
        message.to = ...
        message.subject = ...
        message.send()
    
    // elsewhere
    deferred.defer(send_email, from, to, subject, body, _countdown=10)
    

    【讨论】:

    • 您好,感谢您的回答,但这不会改变我的结果 - 任务已添加到推送队列中,但即使我手动执行它,我也没有收到电子邮件。
    • 电子邮件不会通过开发服务器发送,因此请确保您在生产环境中尝试。还要检查您的日志。
    • 使用开发服务器,您可以在应用日志中看到一些消息,而不是实际发送的电子邮件。
    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 2010-10-27
    • 2015-10-27
    • 2016-10-19
    • 2011-03-25
    • 2020-02-26
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多