2012-07-17 61 views
1

我使用Flask-Mail擴展來啓用應用程序中的郵件發送。我沒有得到芹菜與燒瓶工作,所以我擡頭看了一些其他庫,發現Redis QueueFlask-Mail和Redis隊列庫集成給出錯誤

代碼:

 from flask.ext.mail import Mail,Message 
    from rq import Queue 

    mail = Mail() # mail.init_app(app) is done in top app.py 

    q = Queue() 

    @mod.route('/test') 
    def m11(): 
     msg = Message("Signup Successfull", 
        recipients=['[email protected]']) 
     msg.body = "Hello there, Welcome!" 
     q.enqueue(mail.send, msg) 
     return 'done' 

當我跑那麼代碼郵件發送失敗的rqworker給予以下錯誤:

17:04:49: *** Listening on default... 
    17:06:08: default: flaskext.mail.send(<flaskext.mail.message.Message object at   
         0x1027a9750>) (8c86f0f9-ae76-4297-bf17-a171a67f1b44) 
    17:06:08: 'module' object has no attribute 'send' 
    17:06:08: Moving job to failed queue. 

什麼可以這個錯誤的原因是什麼?

編輯:沒有屬性發送是由於發送實例方法。

現在有不同的問題。我收到郵件對象沒有任何屬性應用程序的錯誤。我想新的rq進程不知道我的燒瓶應用程序,因此錯誤。 如何解決這個問題?

回答

3

您試圖排入郵件對象實例的發送方法,並且RQ無法排入實例方法。如果你看一下文檔頁面的最下方也提到了這一點:

http://python-rq.org/docs/

嘗試定義的另一種方法和發送郵件的方式。如...

from flask.ext.mail import Mail,Message 
from rq import Queue 

mail = Mail() 
q = Queue() 

def queue_mail(msg): 
    mail.send(msg) 

@mod.route('/test') 
def m11(): 
    msg = Message("Signup Successfull", 
        recipients=['[email protected]']) 
    msg.body = "Hello there, Welcome!" 
    q.enqueue(queue_mail, msg) 
    return 'done'