2014-05-18 42 views
-1

因此,我對Python有點新,並試圖創建一個腳本從我的pop3服務器下載電子郵件。我發現了一個Python.org(貌似)簡單的例子,但是當我與我的郵件服務器設置運行的代碼我得到這個錯誤:來自docs.python.org的POP3示例拋出錯誤

Traceback (most recent call last):       
    File "getmail.py", line 4, in <module>      
    M.pass_(getpass.getpass())        
    File "E:\Python32\lib\poplib.py", line 192, in pass_  
    return self._shortcmd('PASS %s' % pswd)     
    File "E:\Python32\lib\poplib.py", line 155, in _shortcmd 
    return self._getresp()         
    File "E:\Python32\lib\poplib.py", line 131, in _getresp  
    raise error_proto(resp)         
poplib.error_proto: b'-ERR Authentication failed.'    

示例代碼從python.org:

import getpass, poplib 

M = poplib.POP3('localhost') 
M.user(getpass.getuser()) 
M.pass_(getpass.getpass()) 
numMessages = len(M.list()[1]) 
for i in range(numMessages): 
    for j in M.retr(i+1)[1]: 
     print j 

的「打印j」行當然會拋出一個錯誤。奇怪的是,該腳本也沒有要求輸入用戶名,只需要輸入密碼,即「身份驗證失敗」。來自我猜測。

我做了以下修改我的腳本刪除我的用戶名/密碼錯誤鍵入的可能性:

import getpass, poplib 

M = poplib.POP3('mail.myPOP3server.com') 
M.user = 'my_username' 
M.pass_ = 'myPassword' 
numMessages = len(M.list()[1]) 
for i in range(numMessages): 
    for j in M.retr(i+1)[1]: 
     print(j) 

而且得到了以下錯誤:

Traceback (most recent call last): 
    File "E:\wos\getmail.py", line 6, in <module> 
    numMessages = len(M.list()[1]) 
    File "E:\Python32\lib\poplib.py", line 219, in list 
    return self._longcmd('LIST') 
    File "E:\Python32\lib\poplib.py", line 162, in _longcmd 
    return self._getlongresp() 
    File "E:\Python32\lib\poplib.py", line 138, in _getlongresp 
    resp = self._getresp() 
    File "E:\Python32\lib\poplib.py", line 131, in _getresp 
    raise error_proto(resp) 
poplib.error_proto: b'-ERR Unknown command.' 
[Finished in 0.4s with exit code 1] 

所以我相信,這是問題的地方:

numMessages = len(M.list()[1]) 

任何人都可以擺脫一些光o這個?

我經常使用docs.python.org作爲示例代碼,這是我第一次有示例代碼失敗。我嘗試將密碼更改爲非常簡短的內容,將「@servername」添加到用戶名中,但仍無法獲取電子郵件列表。

實施例的代碼是在此page

更新:如果downvotes被至少解釋,以便可以通過該處理學習我將不勝感激。

+1

你使用*您的* POP3服務器正確的憑據? – ThiefMaster

+3

['getpass.getuser()'](https://docs.python.org/2/library/getpass.html#getpass.getuser)不應該要求輸入用戶名,它只會獲取當前的名稱用戶,所以如果您需要使用不同的憑證進行身份驗證,請將其替換爲'rawinput'。 – mata

+0

@ThiefMaster是的,我做到了。和2降低這個問題?我在錯誤的地方或什麼? – isildur

回答

3

According to the docs,​​和POP3.pass_方法到你應該通過用戶名密碼&其中,而不是其中的用戶名密碼&要分配變量。因此,你需要改變這一點:

M.user = 'my_username' 
M.pass_ = 'myPassword' 

這樣:

M.user('my_username') 
M.pass_('myPassword') 
+0

感謝您花時間回答這個問題。看起來我需要做更多的閱讀和學習。這使所有的區別。如現在所宣傳的那樣工作。 :d – isildur