Python

2011-07-07 11 views
12

'u kullanarak Gmail'den özel bir e-posta indirin Birisi mevcut bir kod örneğini özelleştirmeme yardımcı olabilir mi?Python

Aşağıdaki yazıda gmail'e bağlanıp içeriği nasıl yükleyeceğimi görebiliyorum, ancak belirli bir e-postayı nasıl arayacağımı ve yalnızca zaman damgasını ve gövdeyi nasıl yükleyeceğimi anlayamıyorum?

MADDE: How can I download all emails with attachments from Gmail?

Özellikle son 5 gün boyunca "[email protected]" e-postaları kapmak ve e-postaların gönderme zamanını ve vücudu indirmek istiyorum. Kullanmam gereken e-postaları belirlemek için bunu ayrıştıracağım.

Kendimi eğitiyorum ve bunu yapmak için yukarıdaki komut dosyasını özelleştirerek zor bir zaman geçiriyorum.

Herhangi bir yardım çok takdir edilmektedir. Teşekkürler.

JD ben IMAPClient kullanmanızı öneririz

+0

hangisi [arama kriterleri] (http://www.example-code.com/csharp/imap-search-critera.asp) o ana kadar denediniz mi? – sarnold

+1

Bu Gmail ile ilgili değil, IMAP/POP Bahse girerim, o yüzden bunu aramalıydınız - kendinizinklerseniz ve webclient ile yapıyorsanız, p – tmg

cevap

15

IMAP daha ezoterik yönlerini birçok boyunca o kağıtları olarak.

aşağıdaki pasajı, senin kriterlere dayalı iletileri çekmek email.message.Message örneklerine mesaj dizeleri ayrıştırmak ve Date ve From başlıkları yazdırılır.

from datetime import datetime, timedelta 
import email 
from imapclient import IMAPClient 

HOST = 'imap.gmail.com' 
USERNAME = 'username' 
PASSWORD = 'password' 
ssl = True 

today = datetime.today() 
cutoff = today - timedelta(days=5) 

## Connect, login and select the INBOX 
server = IMAPClient(HOST, use_uid=True, ssl=ssl) 
server.login(USERNAME, PASSWORD) 
select_info = server.select_folder('INBOX') 

## Search for relevant messages 
## see http://tools.ietf.org/html/rfc3501#section-6.4.5 
messages = server.search(
    ['FROM "[email protected]"', 'SINCE %s' % cutoff.strftime('%d-%b-%Y')]) 
response = server.fetch(messages, ['RFC822']) 

for msgid, data in response.iteritems(): 
    msg_string = data['RFC822'] 
    msg = email.message_from_string(msg_string) 
    print 'ID %d: From: %s Date: %s' % (msgid, msg['From'], msg['date']) 
+0

Teşekkürler! Bunu Python2.6'dan 2.7'ye yükledim ve şimdi message_from_string çağrılırken şu hatayı alıyorum ... 'UnicodeEncodeError: ascii codec 3041 konumundaki u' \ xa0 'karakterini kodlayamaz: ordinal aralıkta değil (128) '. Msg_String üzerinde bir çeşit dönüşüm yapmak zorunda mıyım? Ve aynı e-postada okuyorum, bu yüzden e-posta yükü sorun olamaz. – jond

+0

IMAPClient'i 0.10 veya daha yeni bir sürüme yükselttiniz mi? Bu sürümde davranış değişti; İşlevler artık unicode nesnelere geri döndü (bkz. Https://bitbucket.org/mjs0/imapclient/src/tip/NEWS.rst). Bu durumda belirli bir konu, kırılmayan bir alan. Güvenle kaldırabilirsiniz (muhtemelen) .replace (u '\ xa0', u '') –

+0

Teşekkürler Rob !! Bu hile yaptı. – jond

2
import imaplib 
from datetime import datetime, timedelta 

obj = imaplib.IMAP4_SSL('imap.gmail.com',993) 
obj.login('username','password') 
obj.select() 

today = datetime.today() 
cutoff = today - timedelta(days=5) 
dt = cutoff.strftime('%d-%b-%Y') 
typ, data = obj.search(None, '(SINCE %s) (FROM "[email protected]")'%(dt,)) 
print data