Attachement von mail lösen speichern und mail anschl löschen

Du hast eine Idee für ein Projekt?
Antworten
noPlan
User
Beiträge: 2
Registriert: Sonntag 5. Februar 2017, 10:06
Kontaktdaten:

Hallo alle zusammen,

die Anforderung wie folgt:
einloggen
attachement von mail lösen
attachement speichern
------------------------------ bis hier funktioniert alles
wenn das mail bearbeitet wurde sollte es gelöscht werden
das krieg ich nicht hin :K

ich habe nach einiger Sucherei folgendes Script gefunden ...
funktioniert super !!!

Ich schaffe es nicht das löschen hinzubekommen ....
könnte mir hier bitte wer helfen
danke

Code: Alles auswählen

#!/usr/bin/env python

import poplib
import email
import os
import sys
import string

#
# attsave.py
# Check emails at PROVIDER for attachments and save them to SAVEDIR.
#
# Written by abgdf@gmx.net, 2007, License: LGPL.
#

#-------------------------------
PROVIDER = "pop.provider.tld"
USER = "username"
PASSWORD = "password"

SAVEDIR = "where to save"
#-------------------------------

def saveAttachment(mstring):

    filenames = []
    attachedcontents = []

    msg = email.message_from_string(mstring)

    for part in msg.walk():

        fn = part.get_filename()

        if fn <> None:
            filenames.append(fn)
# decode = True eingefuegt 
            attachedcontents.append(part.get_payload(decode = True))

    for i in range(len(filenames)):
        fp = file(SAVEDIR + "/" + filenames[i], "wb")
        fp.write(attachedcontents[i])
        print 'Found and saved attachment "' + filenames[i] + '".'
        fp.close()

try:
    client = poplib.POP3(PROVIDER)
except:
    print "Error: Provider not found."
    sys.exit(1)

client.user(USER)
client.pass_(PASSWORD)

anzahl_mails = len(client.list()[1])

for i in range(anzahl_mails):
    lines = client.retr(i + 1)[1]
    mailstring = string.join(lines, "\n")
    saveAttachment(mailstring)
	
client.quit()
noPlan
User
Beiträge: 2
Registriert: Sonntag 5. Februar 2017, 10:06
Kontaktdaten:

Hallo zusammen,

für alle die das Thema auch noch interessiert,
hier mein Lösungsweg, Skript funktioniert und erledigt mittels cron perfekt seinen dienst
ist wahrscheinlich nicht die schönste Lösung aber funktioniert. comments für mich das ich mich auch in ein paar jahren noch auskenn !
auf ssl und Verschlüsselung wurde verzichtet

!!
einzig was ich nicht hinkrieg, das script löscht alles nachdem es fertig ist,
wenn neue mails in die inbox kommen sind diese dann auch weg :(
!!

vielleicht hat ja wer hier eine idee.

würde mich freuen

hier der code

Code: Alles auswählen

#!/usr/bin/env python

import poplib
import email
import os
import sys
import string
import time


#
# attsave.py
# Check emails at PROVIDER for attachments and save them to SAVEDIR.
#
# Written by abgdf@gmx.net, 2007, License: LGPL.
# changed by noPlan

PROVIDER = "pop.provider.tld"
USER = "user"
PASSWORD = "paswd"

SAVEDIR = "/folder"
#---------------------------
# noPlan
# wenn die mails nach der Bearbeitung geloescht werden, 
# muss das script zuerst pruefon ob mails vorhanden sind, 
# sind keine mails vorhanden muss die verbindugn wieder geschlossen werden
# sonst werden fehlermeldungen erzeugt
#
#---------------------------
t = time.localtime() * 1000
timestamp = time.strftime("%d%m%y_%H%M") 

def saveAttachment(mstring):

    filenames = []
    attachedcontents = []

    msg = email.message_from_string(mstring)

    for part in msg.walk():

        fn = part.get_filename()

        if fn <> None:
            filenames.append(fn)
#---------------------------
# noPlan
# (decode = True) eingefuegt attachement sonst nich ausfuehrbar / verwendbar
# sleep = notwendig um unique timestamp zu erhalten
#---------------------------
            attachedcontents.append(part.get_payload(decode = True))

    for i in range(len(filenames)):
        fp = file(SAVEDIR + "/" + timestamp + time.strftime("%S") + "_" + filenames[i] , "wb")
        time.sleep(2)
        fp.write(attachedcontents[i])
        print 'Found and saved attachment "' + timestamp + "_" + filenames[i] + '".'
        fp.close()

try:
    client = poplib.POP3(PROVIDER)
except:
    print "Error: Provider not found."
    sys.exit(1)

client.user(USER)
client.pass_(PASSWORD)

anzahl_mails = len(client.list()[1])
#---------------------------
# noPlan
# if count_mails >0 go along else exit
# 
# mails werden nicht verschoben, direkt geloescht
# keep quota of inbox as small as possible
#
#---------------------------
print (anzahl_mails)
count_mails = int(anzahl_mails)
print (count_mails)

if count_mails == 0:
    print "Exit, cuz no mails in inbox so no need to proceed"
    client.quit()
    sys.exit(1)
else:
    print "life goes on ... onward to extract attachements"
    
    for i in range(anzahl_mails):
        lines = client.retr(i + 1)[1]
        mailstring = string.join(lines, "\n")
        saveAttachment(mailstring)
        client.dele(i+1)
client.quit()
print "mails wiped out of inbox, inbox clear"
time.sleep(2)         
print "job done see u soon"
sys.exit(1)
Antworten