Email versenden

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
any
User
Beiträge: 9
Registriert: Mittwoch 1. Juni 2011, 09:02

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()
Zuletzt geändert von any am Mittwoch 1. Juni 2011, 10:08, insgesamt 1-mal geändert.
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

Wenn du python tags benutzt, kannst du dir die Punkte sparen (und macht es insgesamt lesbarer).
any
User
Beiträge: 9
Registriert: Mittwoch 1. Juni 2011, 09:02

Ich hab versucht, es zu verbessern.
Ist im Code selbst etwas Grundlegendes falsch?
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

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")
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
any
User
Beiträge: 9
Registriert: Mittwoch 1. Juni 2011, 09:02

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
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

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
"""
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
any
User
Beiträge: 9
Registriert: Mittwoch 1. Juni 2011, 09:02

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:
Antworten