2016-11-03 51 views
0

我正在從Python的3.3使用poplib代碼中的錯誤,但其中關於Python 2.7的工作原理:3.3 poplib模塊錯誤不是2.7:無效的消息編號

poplib.error_proto: b"-ERR Invalid message number: b'1'" 

我想遷移到Python 3.3因爲我有一個特定的模塊只安裝在我的python 3.3上。

我正在學習python編程語言。

下面是在python 2.7上成功的示例,但此示例代碼在我的python 3.3上不起作用。

import poplib 

pop_server = 'mail01.org' 
user = 'user' 
password = 'pass' 

p = poplib.POP3(pop_server) 
p.user(user) 
p.pass_(password) 

print ("This mailbox has %d messages, totaling %d bytes." % p.stat()) 

msg_list = p.list() 
print (msg_list) 

for msg in msg_list[1]: 
    msg_num, _ = msg.split() 
    resp = p.retr(msg_num) 

這裏是輸出:

This mailbox has 2 messages, totaling 633300 bytes. 
(b'+OK 2 messages:', [b'1 137956', b'2 495344'], 20) 

以下是錯誤回溯:

Traceback (most recent call last): 
    File "AttachmentDownloader.py", line 28, in <module> 
    resp = p.retr(msg_num) 
    File "C:\Python33\lib\poplib.py", line 236, in retr 
    return self._longcmd('RETR %s' % which) 
    File "C:\Python33\lib\poplib.py", line 171, in _longcmd 
    return self._getlongresp() 
    File "C:\Python33\lib\poplib.py", line 147, in _getlongresp 
    resp = self._getresp() 
    File "C:\Python33\lib\poplib.py", line 140, in _getresp 
    raise error_proto(resp) 
poplib.error_proto: b"-ERR Invalid message number: b'1'" 
+0

歡迎堆棧溢出。請仔細閱讀[問],特別是如何創建[mcve]。 –

+0

你怎麼知道它不起作用?什麼是仍然得到錯誤的最小代碼。 –

+0

@PeterWood我已經試過了, resp = p.retr(msg_num) 它可以在python 2.7上工作,但不適用於python 3.3。你有嘗試嗎? –

回答

0

你試圖傳遞一個str的消息數。下面一行

msg_num, _ = msg.split() 

更改爲

msg_num = int(msg.split()[0]) 
+0

是的,它的工作原理, 然後,如果我不工作如果resp [0] .startswith('+ OK'):也email.message_from_string('\ n'.join(resp [1]))這不是工程,是嗎?任何選擇? –

+0

@ADityaBimantara問一個新的問題,如果你還沒有找到答案 –

+0

@PeterWood helloo ,,已解決,謝謝:) 如果我想分享我的最終代碼,可以下載電子郵件附件在python 3.3,其中我應該寫嗎? –