0

にように私は、通常使用され、EmailMessage classを、使用してメールを送信しようとしています:経由でメールを送信してください。 Google 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

こんにちは、おかげでこれは私のために結果を変更しません - タスクがプッシュキューに追加しかし、たとえIれます手動で実行すると、私は電子メールを受信しません。 –

+0

電子メールはdevサーバと一緒に送信されないので、実稼働環境で試してみてください。また、ログを確認してください。 –

+0

devサーバでは、送信されている実際の電子メールではなく、アプリログにいくつかのメッセージが表示されます。 –

関連する問題