Mails + Python - zip als Angang geht nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PreludeBA4
User
Beiträge: 14
Registriert: Dienstag 4. Mai 2010, 08:49

Hallo leute,

ich hab da ein kleines Problem, nach dessen Antwort ich mich seit gestern schon dumm und dämlich suche.
Ich möchte mit meinem Python-Script eine Mail versenden mit einem ZIP-Archiv als Anhang. Im KMail zeigt er es auch an aber zB. unter Outlook oder im RoundCube Webmail wird es nicht angezeigt :?

Hier mal der Code:

Code: Alles auswählen

        self.funcSendMail(["xxx@xxx.com", ], ["", ], ["", ], subject, name_of_file, text, text_anhang, os.path.basename(log_file))

def funcSendMail(self, to, cc, bcc, subject, name_of_file, text, text_anhang='', logfile=''):
        
        # Verbindung zum Mail-Server
        server = SMTP(options["mail_server"])

        msg = MIMEMultipart('alternative')

        # Anzeigedaten
        msg['From'] = options["mail_from"]
        ##msg['To'] = (';').join(to)
        msg['To'] = options["mail_to"]
        ##msg['Cc'] = cc
        msg['Cc'] = options["mail_cc"]
        msg['Bcc'] = options["mail_bcc"]
        msg['Subject'] = subject
        
        # Temporäres Log-File erstellen
        logfile_tmp = open(logfile, 'w')
        logfile_tmp.write(text_anhang)
        logfile_tmp.close()
        
        # Log-File öffnen und auslesen
        # Zip-Datei erstellen und Log-File hinein schreiben
        logfile_in = open(logfile, 'rb')
        ##logfile_out = gzip.open(logfile+'.gz', 'wb')
        ##logfile_out.writelines(logfile_in)
        ##logfile_out.close()
        logfile_out = zipfile.ZipFile(logfile+'.zip', 'w')
        logfile_out.write(logfile, os.path.basename(logfile), zipfile.ZIP_DEFLATED)
        logfile_out.close()
        logfile_in.close()

        # Text als .txt und .html anfügen
        part1 = MIMEText(text, 'plain')
        ##part2 = MIMEText(html, 'html')
        
        # Zip-Datei Attachment erstellen und anhängen
        ##path = logfile+'.gz'
        path = logfile+'.zip'
        ctype, encoding = mimetypes.guess_type(path)
        if ctype is None or encoding is not None:
            ctype = 'application/octet-stream'
        maintype, subtype = ctype.split('/', 1)
        fp = open(path, 'rb')
        part3 = MIMEBase('application', 'zip')
        part3.set_payload(fp.read())
        fp.close()
        # Encode the payload using Base64
        Encoders.encode_base64(part3)

        part3.add_header('Content-Disposition', 'attachment', filename=os.path.basename(path))
        

        msg.attach(part1)
        ##msg.attach(part2)
        msg.attach(part3)

        # Mail versenden
        server.sendmail('xxx@xxx.com', to+cc+bcc, msg.as_string())
        
        # Verbindung zum Server trennen und Temporäre Dateien löschen
        server.quit()
        os.remove(logfile)
        ##os.remove(logfile+'.gz')
        os.remove(logfile+'.zip')

Kann mir da jemand weiter helfen oder zumindest sagen, warum er im KMail angezeigt wird und überall anders nicht?! :(


MFG Ronny
Zuletzt geändert von PreludeBA4 am Dienstag 4. Mai 2010, 10:21, insgesamt 1-mal geändert.
BlackJack

@PreludeBA4: "alternative" scheint mir der falsche Multipart-Typ hierfür zu sein. Das bedeutet, dass die enthaltenen Teile die gleichen Informationen, nur unterschiedlich kodiert, enthalten und der Mail-Client sich den oder die davon zur Anzeige aussuchen kann, mit denen er etwas anfangen kann. Klassisches Beispiel ist hier Plain-Text und HTML als Alternativen, die ja im Grunde die gleichen Informationen enthalten (sollten).

Diese beiden Varianten werden von den meisten Mail-Clients angezeigt, weil die meisten halt auch HTML anzeigen können, oder zumindest wissen wie man dafür eine externe Anwendung startet. Mann könnte zum Beispiel die gleiche Mail auch als RTF-Dokument als Alternative verschicken, und da würden wahrscheinlich mehrere Mailclients sagen -- damit kann ich nichts anfangen, ich zeige einfach den Text/HTML-Teil und gut ist.

Für Attachements wird normalerweise "mixed" als Multypart-Typ verwendet.
PreludeBA4
User
Beiträge: 14
Registriert: Dienstag 4. Mai 2010, 08:49

Vielen dank für die schnelle Antwort. :)
Hab von dem Email-Zeugs leider noch nicht so den Plan mit den ganzen MIME-Typen etc. :(
Aber das scheint der Fehler gewesen zu sein :)

Zumindest im Webmail wird es jetzt angezeigt. Wie es in Outlook etc. ist kann ich im Moment nicht gucken aber wird schon passen denk ich.


Nochmals vielen Dank :D
Antworten