Seite 1 von 1

Python und pop --> eMails ohne attachements herunterladen

Verfasst: Sonntag 5. Juli 2009, 22:28
von Felix
Hallo liebe Python Gemeinde,
ich versuche nun schon seit einiger Zeit mein Mails vom e-Mail Accoount mit pop herunterzuladen. Dies funktioniert eigendlich tadellos. Nun habe ich aber das Proplem, das die Attachements auch heruntergeladen werden, was enorme Zeit benötiht. Da ich das script aber auf einen System herunterladen möchte wo ich nur eine Konsole zur Verfügung habe, bringen mir die Attachements nichts.
Ich bräuchte nur das Datum, die Zeit, den Sender und der Textinhalt von dem Mail.
Den Code welcher ich verwende habe ich in dem Forum gefunden und meinen Bedürfnissen angepasst.
Er Sieht momentan so aus.

Code: Alles auswählen

# -*- coding: UTF-8 -*-

import poplib, email
from email.Utils import parsedate
from datetime import datetime
import base64

def get_emails(server, port, login, passwd, anz_mail):
    mails = []
    mailer = poplib.POP3(server, int(port))
    mailer.user(login)
    mailer.pass_(passwd)
    
    status = mailer.stat()
    print '---'
    print status
    print '---'
    num = int(status[0])
    if num > int(anz_mail):
        x = int(anz_mail)
    else:
        x = num
    i = 0
    while i < int(x):
        print num
        msg = email.message_from_string('\n'.join(mailer.retr(num)[1]))
        print 'hallo'
        date_string = parsedate(msg['Date'])
        mail = {}
        print 'title'
        mail['title'] = msg['Subject']
        print 'sender'
        mail['sender'] = msg['From']
        print 'time'
        mail['time'] = '%s:%s:%s' % (date_string[3], date_string[4], date_string[5])
        print 'date'
        mail['date'] = '%s.%s.%s' % (date_string[2], date_string[1], date_string[0])
        #mail['date'] = datetime(date_string[0], date_string[1], date_string[2], date_string[3], date_string[4], date_string[5])
        #if msg.is_multipart():
        #   mail['text'] = msg.get_payload()[0].get_payload()
        #else:
        #   mail['text'] = msg.get_payload()
        #print msg.get_charsets()
        mails.append(mail)
        i = i + 1
        num = num - 1
    

    print mails
    return mails
Nun glaube ich das der Code msg = email.message_from_string('\n'.join(mailer.retr(num)[1])) die Mails in die Variable msg schreibt.
Habe aber bis anhin nicht herausgefunden, wie ich diese Zeile umschreiben muss, so das die Attachements nicht heruntergeladen werden.
Für einen Tipp bin ich dankbar oder noch besser einen Link zu einer guten Doku über die Python Module POP, POP_SSH, IMAP und IMAP_SSH.

Gruss Alex

Verfasst: Sonntag 5. Juli 2009, 23:04
von jerch
Bei Deinem POP-Problem kann ich Dir nicht weiter helfen, für IMAP empfehle ich Dir die RFC3501. Wenn Du während des Lesens immermal auf die Dokumentation von imaplib schielst, merkst Du, daß das eigentlich alles wichtige schon vorhanden ist und wo der Implementationshase hinhoppeln muß. (Wenn ich mich recht entsinne, fehlen einige Quotabefehle, die mußte ich damals für CyrusIMAP nachimplementieren.)

Verfasst: Montag 6. Juli 2009, 05:35
von Felix
THX für den Link,
habe die Dok mal schnell überflogen. Sieht interessant aus.
Werde mich dan mal in den nächsten Tagen einlesen und ein bischen mit IMAP rumtesten.

Gruss Felix