eigentliche Nachricht wird bei email nicht gesendet

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

Hallo,

ich habe ein Problem mit der Erstellung eines Mini-Mailprogramms.
In einer Klasse habe ich eine Funktion definiert, mit der die Oberfläche erstellt wird, in der ich alle Angaben wie Absender, Betreff, die eigentliche Nachricht, etc.. machen kann.
Eine andere Funktion soll dann beim Klick auf den senden-Button die Mail auch abschicken. Dieses Ereignis wird auch ohne Fehlermeldung durchgeführt und eine Mail kommt beim Empfänger mit allen Angaben (Betreff, Absender, ...) an, außer der eigentlich Nachricht :oops:
Der Nachrichtentext wird aber aus dem (mehrzeiligen) Textfeld gelesen und in einer Variable gespeichert. Das habe ich mittels der print-Anweisung getestet. Diese Variable übergebe ich auch der sendmal-Anweisung, aber eben die Nachricht kommt nicht an. Eine leere E-Mail wird gesendet.
Kann mir einer sagen, was ich da falsch mache. Ich beschäftige mich erst seit einigen Tage mit Python und kann eigentlich keinen Fehler erkennen. Das ist der Code:

Code: Alles auswählen

    def senden(self):
        ich='meineMail' # meine email-Adresse
        an=self.mailText.get() # email-Adresse Empänger
        betreff=self.betreffText.get() # Betreff/Subject
        nachricht=self.nachrichtText.get("1.0", END) # die eigentliche Nachricht
        absendername=self.vonText.get() # Absendername, der angezeigt werden soll
        empfaengername=self.anText.get() # Empfängername der angezeigt werden soll

        text = 'From: ' + absendername + '\n'
        text += 'To: ' + empfaengername + '\n'
        text += 'Subject: ' + betreff + '\n'
        text = text + nachricht
        
        server = smtplib.SMTP('meinMailserver') # mein Mailserver
        server.login('meinBenutzername', 'meinKennwort') # meine Logindaten
        server.sendmail(ich, an, nachricht) # das eigentliche senden der mail
        server.quit() # ausloggen
Die Variablennamen sind nicht mehr so aussagekräftig, weil ich häufig Veränderungen an meinem Programm vorgenommen habe. Deshalb habe ich sie nochmal kommentiert.

Ich hoffe, mir kann jemand weiterhelfen. Ich wäre euch sehr dankbar.

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

Stay hat geschrieben:

Code: Alles auswählen

        text = text + nachricht
Hi. Diese Zeile muss so lauten:

Code: Alles auswählen

        text += "\n" + nachricht
Der Header einer Mail wird von der eigentlichen Mail durch eine Freizeile getrennt. Die hat bei dir gefehlt, deswegen wurde die Nachricht zum Header gezählt (was man beim betrachen des Quelltextes der empfangenen Email auch gesehen hätte :wink: )...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

@Milan:
text wird doch beim senden gar nicht verwendet, oder sehe ich schlecht :wink:?

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

Jo, stimmt. Ich hab nur das Problem gelesen und gleich an diese Lösung gedacht (weil das nämlich noch dazu käme)... da hab ich dann nicht mehr danach geschaut, weil ich schon das Problem überflogen hab. :oops: also muss auch noch "server.sendmail(ich, an, text)" dastehen :wink: . Danke Mawe.
Stay

Hallo,
danke für eure Antworten.
Am Ende von text ist eigentlich schon ein \n, deshalb habe ich es bei text=text+nachricht weggelassen.
Ich habe ziemlich viele Änderungen daran vorgenommen, deshalb hat sich wohl der Fehler eingeschlichen, dass ich statt text nachricht versenden wollte. Danke für diesen Hinweis.
Aber wenn ich da text reinschreibe funktioniert es trotzdem nicht. Muss ich trotzdem ein \n davor setzen, obwohl da eigentlich schon eins ist?
Gruß,
Stay
Stay

Nochmal ich. Also es funktioniert natürlich schon mit Milans Lösung, ich wollte eigentlich nur wissen, warum man da quasi zwei Mal \n braucht.
An dich Milan nochmal Danke.
Gruß,
Stay
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Stan,

mit einem \n gibts nur eine neue Zeile, der Body muss aber durch eine Leerzeile vom header getrennt sein, und die erzeugst Du mit den 2 \n.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Stay

Ok, alles klar. Dann merk ich mir das: einfach zwei \n und das Ding funktioniert.
Vielen Dank für eure Hilfe und Bemühungen.
Gruß,
Stay
Antworten