Email mit MIME Type

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
MaDlocK

Hallo zusammen.

Eins vorweg. Bin noch ein ziemlicher Python Newbie. :roll:

Jetzt meine Frage:

Ich möchte mit Python Emails mit bestimmten Anhängen verschicken. Wie das mit dem Email verschicken geht is mir schon klar. Aber für den Anhang brauche ich einen bestimmten MIME Typ. Wie kann ich sowas einbinden?

MfG
MaDlocK
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich denk mal, dass gehört unter Netzwerke. Leider kann ich dir nicht konkret helfen, da ich mich auch nur mit dem versenden von Emails mittels der smtplib ohne Anhang beschäftigt habe. Ich weiß aber das es geht und Python die Werkzeuge dafür liefert. Mit dem Modul email hast du ein mächtiges, wenn leider auch nicht leicht zu verstehendes Werkzeug. Damit ist es dir möglich Emailnachrichten inklusive MIME Types zu erstellen, aber nicht zu versenden. Leider kann ich dir hier nicht weiterhelfen, du müsstest dich da durch die Pythondocu wühlen...

Oder du umgehst das ganze und bastelst es dir gleich einfacher zurecht, mittels dem Modul mimetypes. Wenn du mir die Syntax von Emailanhängen erklären kannst, würde ich dir auch mit Code weiterhelfen :) ...

Milan
MaDlocK

Zuerst ma danke für die Info :D

Das Problem is, dass ich es auch noch nicht geschafft habe, überhaupt einen Anhang an die Mail zu packen, egal welcher Typ von Datei. Darum kann ich dir das leider auch nicht sagen. Alles was ich bisher geschafft hab, ist eine Mail zu verschicken aber ohne Anhang geschweige denn MIME Type Definition. :(
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich hab mal gegooglet und hab ein interessantes Perl-Script gefunden, mit dem du Emails mit Anhang via CGI versenden kannst. Das kannst du bestimmt nach Python anpassen, du musst nur das Webfronted rausnehmen und den Code umformen.

Oder es geht noch besser :D : eine komplette Anleitung, wenn auch in PHP. Aber soweit ich das überschaut habe, gibt es für alles äquivalente Funktionen in Python. Das dürfte dann an deine wünsche ziemlich nah rankommen. Viel Spaß beim basteln, meld dich mal wenn du es geschafft hast oder es probleme gibt.

Milan
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

So, weil es mich selber interessiert und weil ich heute sehr gute Nachrichten für meinem Schulprojekt erhalten habe, gibt es wie versprochen ein wenig Code. Ich habs schon getestet, der Emailversand funktioneirt bei mir. Hier ist eine Funktion, die dir aus den entsprechenden Angaben eine Emailnachricht bastelt, die du nur noch via smtplib versenden brauchst. Viel spaß damit.

hth Milan.
MaDlocK

Vielen Dank für die ausführlichen Infos. Das hilft mir auf jeden Fall weiter. Werd mir das jetzt mal genauer anschauen und mich melden, wenn ich`s geschafft hab oder es Probleme gibt.

CyA
MaDlocK
MaDlocK

@Milan:
Hi! Habe deinen Code Abschnitt zum Verschicken von Mails mit Anhang mal versucht nachzuvollziehen. Schaff es mittlerweile ne Mail mit Anhang zu verschicken aber das Problem ist der MIME Type. Ich will den Anhang nämlich im Dicom MIME Type (application/dicom) codiert abschicken. Nur wie kann ich das Python sagen?
Im Mail Header steht nach Versenden der Nachricht immer multipart/mixed :(

Und was bedeutet eigentlich dieses Boundary? :?:

MfG
MaDlocK
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Am besten überfliegst du nochmal den Link von mir oben zu der PHP-Anleitung: http://www.php4-forum.de/mime_mail.htm. Es ist nämlich unumgänglich, dass im Mailheader multipart/mixed steht. Das sagt dem emailprogramm, dass die Mail aus mehreren Teilen zusammengesetzt ist. Damit das Programm dann aber auch weiß, wo ein Teil beginnt und wo er aufhährt ist ein boundary notwändig, also eine im Header definierte Zeichenkette, die als "Abtrennung" für jeden Einzelteil dient. Die Teile in denen Dateianhänge stehen, werden durch eine Abtrennung (boundary) eingeleitet und dann extra gekennzeichnet (Content-Disposition: attachment). Willst du nun den Mimetype für eine Datei im Anhang mit einem bestimmten Format erzwingen, musst du nur eine Zeile in meinem Code verändern:

Code: Alles auswählen

mimetype=mimetypes.guess_type(dateiname,0)[0] or "application/octet-stream"
wird zu

Code: Alles auswählen

mimetype="application/dicom"
Oben wurde von Python geschätzt, welcher Mimetype zutrifft und falls keiner gefunden wird, wird standartmäßig application/octet-stream gesetzt. Unten wird dein Mimetype einfach festgeschrieben.

Ich hoffe mal, ich hab jetzt alle Klarheiten beseitig :wink: :lol:

Milan
MaDlocK

Hey Milan, du hast echt was gut bei mir :D
Glaub, ich bin ziemlich nah dran...
BIG THX

Wenn ich doch nicht mehr weiterkommen sollte, meld ich mich wieder. :lol:
MaDlocK

Jetzt hab ich noch ein kleines Problem:

Gibt es ein Programm oder eine Möglichkeit, wie ich eine Mail mit Anhang komplett textbasiert anzeigen lassen kann, damit ich überprüfen kann, ob die Datei wirklich mit application/dicom codiert wurde?

In jedem Email Programm steht zwar
MIME Version 1.0
Content-Type: multipart/mixed; boundary: dsfsfsdfsdfsdfsf

aber den restlichen Body Part kann ich nicht anschaun :(

MfG
MaDlocK
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Das liegt aber wenn an deinem Mailprogramm, mit dem du die Nachricht empfängst. Es gibt bei jedem guten Emailprogramm die Funktion, die Email zu speichern, bzw im Quelltext anzuzeigen (Outlook, The Bat, Kmail...). Rein Text schicken würde ich nicht, dass kann zu Übertragungsfehlern bei Binärdaten kommen.

Milan
MaDlocK

Ja die Option "Speichern" gibts schon, aber dann wird nur der Text der Email in nem Textfile abgespeichert und nicht der Anhang. :?

Um zu Testen, dass der Anhang in dem gewünschten MIME Type codiert wurde, muss ich den doch binär darstellen, oder? :roll:

Bis jetzt seh ich ja nur, dass es eine "multipart/mixed" Mail ist, aber nicht welcher MIME Type für den Anhang verwendet wird. :(

Greetz
MaDlocK
Antworten