2010-01-06 23 views
2

我在使用最新的django svn在Python 2.6上使用imaplib時出現問題。我想下載隊列中的imap電子郵件(使用celeryd)。我能夠從命令行連接/下載電子郵件,但是當我通過django將任務卸載到celeryd時,出現此錯誤:「SSLError:[Errno 1] _ssl.c:1325:error:1408F10B:SSL routines:SSL3_GET_RECORD :錯誤的版本號「。使用芹菜隊列python imaplib ssl錯誤

Imaplib文檔沒有提及如何指定SSL版本。我正在嘗試從Gmail中收取電子郵件。我不明白爲什麼使用celeryd將任務卸載到隊列會導致任務失敗。任何幫助將非常感激。

編輯:這裏是一個堆棧跟蹤:

文件 「/usr/lib/python2.6/imaplib.py」,線路643,在選擇 典型,DAT = self._simple_command(姓名,郵箱)

文件 「/usr/lib/python2.6/imaplib.py」,線1059,在_simple_command 回報self._command_complete(姓名,self._command(姓名,*參數))

文件「/ usr/lib/python2.6/imaplib.py「,第889行,在_command_complete中 typ,data = self._get_tagged_response(tag)

文件 「/usr/lib/python2.6/imaplib.py」,線路990,在_get_tagged_response self._get_response()

文件 「/usr/lib/python2.6/imaplib.py」,線907,在_get_response RESP = self._get_line()

文件 「/usr/lib/python2.6/imaplib.py」,線1000,在_get_line 線= self.readline()

文件「/usr/lib/python2.6/imaplib.py」,行1170,在readline char = self.sslobj.read(1)

文件 「/usr/lib/python2.6/ssl.py」,線136,在讀 返回self._sslobj.read(LEN)

SSLError:[錯誤1] _ssl.c:1325:錯誤:1408F10B:SSL例程:SSL3_GET_RECORD:錯誤的版本號

編輯:這是我試圖運行的任務,其中imap_parser是一個包裝imaplib並將電子郵件加載到我的數據庫的模塊。

class DumpIMAPData(Task): 
    def run(self, user, username, password, imap_address, **kwargs): 
     logger = self.get_logger(**kwargs) 
     celery.log.redirect_stdouts_to_logger(logger, loglevel=None) 
     #imap_address is e.g. 'imap.gmail.com'         
     parser = imap_parser.IMAPFetcher(imap_address, username, password, user\ 
) 
     parser.load_all_emails() 
    return True 

我已經注意到了任務實際運行使用芹菜,除非我守護進程使用--detach標誌的任務。我不知道爲什麼只有在作爲守護進程運行時纔會失敗。我試着用-u和-g標誌,相同的umask設置相同的userid和groupid,並確保守護程序和非守護程序版本的路徑和工作目錄相同,但該任務仍不會運行當芹菜作爲守護進程運行時在芹菜中。

我「米使用最新版本的芹菜(0.9.4)。

回答

1

根據celeryd的創造者:

芹菜不再做自己的拆卸作爲01a8a0e的。它存在太多的問題,並且由於它在使用start-stop-daemon,supervisord,launchd等進行分離時工作,所以鼓勵您使用這些工具。

0

你連接到不說話TLS的端口。你是不是想談一個TLS/SSL啓用郵件服務器,或者是芹菜嘗試將TLS用於其AMQP連接?

+0

它是一個啓用了SSL的郵件服務器(gmail) – Evan 2010-01-06 21:55:09

+0

,您正在連接端口993,正如gmail文檔中所指定的那樣?還使用'IMAP4_SSL'? – 2010-01-06 21:58:22

+0

是的,它看起來像是imaplib用於SSL的默認端口(並且通常是通常的imap ssl端口)。 也使用IMAP4_SSL ..它完全在命令行工作,但當我卸載任務隊列與相同的參數,它失敗 – Evan 2010-01-06 22:01:15

1

如果只在芹菜工人內部運行時發生中斷,可能會有amqplib(它使用ssl模塊),或者它可能是多處理和分叉的東西(全局變量在fork之前被初始化爲no更長的活着)

你能否包括你試圖運行的任務? 你是否連接到任務內部的服務器,還是某種共享對象?

+0

也可能,imaplib不是線程/ forksafe,並且有一個連接或類似的緩存,那麼當任務開始時,您可能必須找到並清除它。 – asksol 2010-01-08 11:05:12

+0

嘿asksol,謝謝你的迴應。我在上面的問題中增加了更多信息,包括我正在運行的任務。另外,我注意到任務將在芹菜中運行,除非芹菜以--detach標誌作爲守護進程運行。有任何想法嗎? – Evan 2010-01-09 10:33:36