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