2008-11-24 23 views
10

tldr: Ai đó có thể chỉ cho tôi cách định dạng đúng ví dụ Python iMAP này để nó hoạt động không?Ví dụ được định dạng đúng cho truy cập email Python iMAP?

từ https://docs.python.org/2.4/lib/imap4-example.html

import getpass, imaplib 

M = imaplib.IMAP4() 
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() 

Giả email của tôi là "[email protected]" và mật khẩu là "password", làm thế nào nên này trông? Tôi đã thử M.login(getpass.getuser([email protected]), getpass.getpass(password)) và đã hết thời gian chờ. Hoàn thành newb ở đây, vì vậy nó rất có thể tôi bị mất một cái gì đó hiển nhiên (như tạo một đối tượng iMAP đầu tiên? Không chắc chắn).

+2

Chọn mã, nhấn Ctrl + K – jfs

Trả lời

2

Bạn có quên chỉ định máy chủ IMAP và cổng không? Sử dụng một cái gì đó để tác động của:

M = imaplib.IMAP4_SSL('imap.gmail.com') 

hay,

M = imaplib.IMAP4_SSL() 
M.open('imap.gmail.com') 
11
import imaplib 

# you want to connect to a server; specify which server 
server= imaplib.IMAP4_SSL('imap.googlemail.com') 
# after connecting, tell the server who you are 
server.login('[email protected]', 'password') 
# this will show you a list of available folders 
# possibly your Inbox is called INBOX, but check the list of mailboxes 
code, mailboxen= server.list() 
print mailboxen 
# if it's called INBOX, then… 
server.select("INBOX") 

Phần còn lại của mã của bạn dường như đúng.

+2

Chỉ để tiết kiệm thời gian khác, những người có thể thấy điều này ... đó là "IMAP4_SSL" không chỉ là "IMAP_SSL". – Seaux

+0

@ocdcoder: đẹp bắt, cảm ơn. – tzot

11

Đây là tập lệnh tôi đã sử dụng để lấy thông tin nhật ký từ hộp thư của mình. Presented at LFNW 2008 -

#!/usr/bin/env python 

''' Utility to scan my mailbox for new mesages from Logwatch on systems and then 
    grab useful info from the message and output a summary page. 

    by Brian C. Lane <[email protected]> 
''' 
import os, sys, imaplib, rfc822, re, StringIO 

server ='mail.brianlane.com' 
username='yourusername' 
password='yourpassword' 

M = imaplib.IMAP4_SSL(server) 
M.login(username, password) 
M.select() 
typ, data = M.search(None, '(UNSEEN SUBJECT "Logwatch")') 
for num in data[0].split(): 
    typ, data = M.fetch(num, '(RFC822)') 
# print 'Message %s\n%s\n' % (num, data[0][1]) 

    match = re.search( "^(Users logging in.*?)^\w", 
         data[0][1], 
         re.MULTILINE|re.DOTALL) 
    if match: 
     file = StringIO.StringIO(data[0][1]) 
     message = rfc822.Message(file) 
     print message['from'] 
     print match.group(1).strip() 
     print '----' 

M.close() 
M.logout() 
+4

Lập trình viên lập trình: sử dụng mô-đun Python "rfc822" đã không được dùng nữa kể từ Python 2.3. (Nguồn: http://docs.python.org/2.6/library/rfc822.html) Thay vào đó, hãy cân nhắc sử dụng mô-đun email. –

0

Thay vì M.login(getpass.getuser([email protected]), getpass.getpass(password)) bạn cần phải sử dụng M.login('[email protected]', 'password'), ví dụ: chuỗi đồng bằng (hoặc tốt hơn, các biến chứa chúng). Nỗ lực của bạn thực sự không nên có tác dụng gì cả, vì's getuser không lấy đối số mà chỉ trả về tên đăng nhập của người dùng. Và [email protected] thậm chí không phải là tên biến hợp lệ (bạn không đặt dấu ngoặc kép) ...

Các vấn đề liên quan