2009-12-01 106 views
4

我如何閱讀從我的郵箱使用Python的郵件?閱讀郵件使用python

import getpass, imaplib 
M = imaplib.IMAP4('IMAP4.gmail.com:993') 
M.login(getpass.getuser(), getpass.getpass()) 
M.select() 
typ, data = M.search(None, 'ALL') 
for num in data[0].split(): 
    typ, data = M.fetch(num, '(RFC822)') 
    print 'Message %s\n%s\n' % (num, data[0][1]) 
M.close() 
M.logout() 

這是我的代碼.. 但是當我執行此其拋出錯誤:

Traceback (most recent call last): 
    File "E:/jagdish/python progs/readmail.py", line 2, in <module> 
    M = imaplib.IMAP4('IMAP4.gmail.com:993') 
    File "C:\Python25\lib\imaplib.py", line 163, in __init__ 
    self.open(host, port) 
    File "C:\Python25\lib\imaplib.py", line 230, in open 
    self.sock.connect((host, port)) 
    File "<string>", line 1, in connect 
gaierror: (11001, 'getaddrinfo failed') 

誰能幫我這個???

回答

13

三個問題:

  1. 主機名是imap.gmail.com,不imap4.gmail.com
  2. 的IMAP4構造函數有兩個參數:主機和端口(沒有冒號分隔)
  3. 的Gmail希望你是在討論SSL

所以:

import imaplib 
M = imaplib.IMAP4_SSL("imap.gmail.com", 993) 
+0

這就是答案:Gmail希望你談論SSL。像SimonJ說的那樣使用IMAP4_SSL()函數。我最近用Gmail做了這個。 IMAP應該是一樣的。 – hughdbrown 2009-12-01 22:35:37

+0

嘿謝謝。 它的工作原理.. – Jagdish 2009-12-02 02:29:35

+0

由於默認的ssl端口是993,所以可以這樣寫:'M = imaplib.IMAP4_SSL(「imap.gmail.com」)' – Caumons 2017-04-20 16:05:35

1

該錯誤意味着主機無法訪問或不存在,您可以通過搜索「gaierror」(它代表獲取地址信息錯誤)找到該主機。

改爲嘗試「imap.gmail.com:993」,如here所述。