Seite 1 von 1

Email versenden

Verfasst: Mittwoch 1. Juni 2011, 09:24
von any
Hallo zusammen!
Ich brauche bitte Hilfe zum nachfolgenden Code, der eine Email mit Text versenden soll. Das Versenden und Empfangen der Email funktioniert soweit, nur der darin enthaltene Text ("text") wird nicht angezeigt/ist nicht enthalten. Das Programm versendet also eine leere Mail, ohne Betreffzeile usw. Ich finde den Fehler nicht. Gibt es Analysen, die ich durchführen kann, um meinen Fehler zu finden? Ich lerne erst seit 2 Wochen zu programmieren und habe dafür mit Python angefangen. Danke für Eure Hilfe!!

Code: Alles auswählen

import smtplib, time
from email.message import Message

msg.set_payload("text")
msg["Subject"] = "text"
#msg["From"] = abc <ab@c.de>
#msg["To"] = xyz <xy@z.de>
#print (msg.as_string())

smtp = smtplib.SMTP("mail.host.de")
print "SMTP identified"
  
smtp.login("ab@c.de", "pwd")
print "Login successful"
smtp.sendmail(
              "abc <ab@c.de>", 
              "xyz <xy@z.de>",
              "text")
print "Email sent"
smtp.quit()

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 09:30
von Liffi
Wenn du python tags benutzt, kannst du dir die Punkte sparen (und macht es insgesamt lesbarer).

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 10:10
von any
Ich hab versucht, es zu verbessern.
Ist im Code selbst etwas Grundlegendes falsch?

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 10:26
von Liffi
Hier ist beschrieben, wie man eine Email mit smtplib verschickt.
Versuch mal

Code: Alles auswählen

smtp.sendmail(
              "abc <ab@c.de>",
              ["xyz <xy@z.de>"],
              "text")

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 10:32
von cofi
Ja: "msg" ist keine gültige email.

Leider hab ich grad keine Zeit ein Beispiel zu machen, aber an stelle von "msg" wird eine komplette email erwartet.
Schau dir mal das `email` Paket in der Standardlibrary an, dort gibt es MIME-Klassen, die sich zu einem passenden String ausgeben lassen.

@Liffi: Die Aenderung macht nichts, `sendmail` macht fuer Strings eine Ausnahme und das richtige. Der Link passt .. aber man will Emails nicht von Hand zusammensetzen.

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 10:49
von any
Danke für die guten Tipps! Ich hab diese MIME-Klassen gestern schon ausprobiert, das klappt aber auch nicht. Als Anfänger bekommt man immer eine riesige Ladung Fehlermeldungen. (Die zusätzlichen eckigen Klammern brauche ich doch nur bei mehr als einem Empfänger, oder? Geht mit genauso gut wie ohne in meinem Fall.)

Dieser Abschnitt allein reicht schon, um die Mail zu versenden und zu erhalten:

Code: Alles auswählen

smtp = smtplib.SMTP("mail.host.de")
print "SMTP identified"
 
smtp.login("ab@c.de", "pwd")
print "Login successful"
smtp.sendmail(
              "abc <ab@c.de>",
              "xyz <xy@z.de>",
              "text")
print "Email sent"
smtp.quit()
Es fehlt nur immer noch der INHALT ("text"). Ein Betreff ist eigtl. nicht nötig. Somit ist der eigentliche Text in der Mail das einzige Problem für mich..

:K

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 11:03
von Liffi
any hat geschrieben: Es fehlt nur immer noch der INHALT ("text"). Ein Betreff ist eigtl. nicht nötig. Somit ist der eigentliche Text in der Mail das einzige Problem für mich..
Wie oben im Link erklaert (ungetestet):

Code: Alles auswählen

msg= """\
From: 
To: 
Subject: 

Hier koennte ihr Text stehen
"""

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 12:43
von cofi
http://docs.python.org/library/email-ex ... l-examples

Das erste Beispiel zeigt doch ganz schoen was man machen muss. Der Vorteil gegenueber dem haendischen Zusammensetzen ist eventuell noch nicht ganz deutlich, aber spaetestens mit Text ausserhalb von ASCII wirds unangenehm.

Re: Email versenden

Verfasst: Mittwoch 1. Juni 2011, 16:17
von any
Jetzt funktioniert es auch! Ich danke Euch sehr für die Tipps und Links zu den Anleitungen! So ist das Lernen einfacher..
Hab jetzt doch noch das Ziel, einen Betreff einzufügen, sollte bald kein Problem mehr sein.. :wink: