来自docs.python.org的POP3示例引发错误

时间:2014-05-18 17:53:41

标签: python email runtime-error

所以我对Python有些新手并试图创建一个脚本来从我的pop3服务器下载电子邮件。我在Python.org上找到了一个(看似简单的)简单示例,但是当我使用我的邮件服务器设置运行代码时,我收到此错误:

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

&#34; print j&#34; line当然会抛出一个错误。奇怪的是,脚本也没​​有要求输入用户名,只是要求输入密码,即#34;身份验证失败。&#34;来自我的猜测。

我对我的脚本进行了以下更改,以消除我错误地输入用户名/密码的可能性:

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])

有人可以对此有所了解吗?

我经常使用docs.python.org作为示例代码,这是我第一次让示例代码失败。我尝试将密码更改为非常简短的密码,添加&#34; @ servername&#34;用户名仍然无法获取电子邮件列表。

示例代码位于此page

更新:我很感激,如果至少解释了这个问题,那么我可以从这个过程中学习。

1 个答案:

答案 0 :(得分:3)

According to the docsPOP3.userPOP3.pass_是您应该传递用户名&amp;的方法密码,而不是用户名和密码的变量。密码将被分配。因此,您需要更改此内容:

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

到此:

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