0

我試圖使用EmailMessage class,其中,在正常使用時發送郵件,如:通過電子郵件發送電子郵件。在谷歌App Engine的延遲庫

message = mail.EmailMessage() 

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

message.send() 

作品就好了;我按預期收到電子郵件。

不過,我想用這個email.send()事件添加到推送隊列中的deferred library

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

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) 
+0

您好,感謝的答案,但是這並不會改變我的結果 - 任務被添加到佇列,但即使我手動執行它,我沒有收到電子郵件。 –

+0

電子郵件不會與開發人員服務器一起發送,因此請確保您嘗試進行生產。同時檢查你的日誌。 –

+0

使用開發服務器,您可以在應用程序日誌中看到一些消息,而不是正在發送的實際電子郵件。 –