发送电子邮件通过。 Google App Engine中的延迟库

时间:2017-04-07 12:02:33

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

我尝试使用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,但我不认为我遇到了这些人中的任何一个?

1 个答案:

答案 0 :(得分:0)

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)