Warum sendet er die E-Mails nicht?

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

Ich hoffe einer kann mir bei meinen Problem helfen! Ich muß für meiner Facharbeit (Klasse 12) einen E-Mail-Client schreiben, aber er sendet die E-Mails nicht!
Hier der Code für das senden:

Code: Alles auswählen

    def abschicken(self):
        daten=file('C:\\WINDOWS\\daten.txt', 'r')
        self.liste=load(daten)
        msg= 'From: '+self.liste[0]\
             + 'To: '+self.adressat.get()\
             +'Subject: '+self.betreff.get()\
             +'MIME-Version: 1.0\r\nContent-Type: '\
             +'text/html\r\n'\
             +'Content-Transfer-Encoding: '\
             +'quoted-printable\r\n\r\n'\
             +self.eingabe.get('1.0',END)
        self.client=smtplib.SMTP(self.liste[4])
        self.client.connect(self.liste[4])
        self.client.login(self.liste[5], self.liste[6])
        self.client.set_debuglevel(1)
        self.client.sendmail(self.adressat.get(),
                             self.liste[0], msg)
        self.client.quit()
Er gibt dann diesen Fehler:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\SCHULE\PYTHON2.3\lib\lib-tk\Tkinter.py", line 1345, in __call__
    return self.func(*args)
  File "C:\WINDOWS\Profiles\Martin\Eigene Dateien\Facharbeit\Programm\E-Mail_Client-senden.pyw", line 222, in abschicken
    self.client=smtplib.SMTP(self.liste[4])
  File "C:\SCHULE\PYTHON2.3\lib\smtplib.py", line 240, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\SCHULE\PYTHON2.3\lib\smtplib.py", line 302, in connect
    raise socket.error, msg
error: (10060, 'Operation timed out')
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

Ich würde jetzt mal ganz plup antworten weil er den server nicht erreicht ;)
naja aber da ich dir helfen will wär schon gut zu wissen was in der liste steht ?!

eine sache ist aber schonmal das du connect nicht mehr aufrufen musst wenn du dem construktor schon die daten übergibst... aber da passiert ja nicht der error... gib doch mal über print self.liste[4] den wert aus und guck nach ob der richtig ist wenn ja versuch den server anzupingen oder versuch sogar über telnet auf port 25 zu verbinden dann geht man aber echt auf nummer sicher ;)
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ja, hier weiß man nicht, welchen Server du gerade zu erreichen versuchst... Selbst wenn dir das aber gelingen würde, seh ich noch ein paar Fehler: nach jeder "Information" im Mailheader kommt eine neue Zeile. Bei dir sähe msg dann so aus:

Code: Alles auswählen

>>> """From: me@anywhere.comTo:  xyz@mail.deSubject: Betreff..."""
muss aber so hier sein:

Code: Alles auswählen

>>> """From: me@anywhere.com
To:  xyz@mail.de
Subject: Betreff..."""
Du musst also für jedes Zeilenende ein "\n" einfügen.

Milan
Gast

In der Liste steht
liste[0]='E-Mail@yahoo.de';
liste[1]=POPServer; (yahoo.de)
liste[2]=PopUser;
liste[3]=Passwort;
liste[4]=SMTPServer; (yahoo.de)
liste[5]=SMTPUser;
liste[6]=Passwort;

und "\n" nimmt Python nicht an führt erst gar nicht das Script aus!
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Tut mir leid, aber ich glaube du hast mich irgendwie missverstanden, denn du verwendest es ja selber: "'MIME-Version: 1.0\r\nContent-Type:"

Übersichtlicher könntest du aber auch schreiben (ganz ohne "\r\n"):

Code: Alles auswählen

msg= """From: %s
To: %s
Subject: %s
MIME-Version: 1.0
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

%s"""%(self.liste[0],self.adressat.get(),self.betreff.get(),self.eingabe.get('1.0',END))
ein Portscan über yahoo.de liefert mir übrigens das hier, da ist kein offener SMTP-Server zu sehen. Informier dich lieber noch mal, ob du die richtige SMTP-Server Adresse benutzt. Die muss nicht zwanglaüfig die der Emailadresse sein :wink:

Code: Alles auswählen

(The 1600 ports scanned but not shown below are in state: filtered)
Port       State       Service
80/tcp     open        http 
cu. Milan
Gast

Danke für die Mühe! Ich werde morgen oder Montag mal meinen Informatiklehrer (M.Weigend) fragen, wenn er eine Lösung weis werde ich sie posten!
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

ich denk mal das yahoo.de ne subdomain hat für den email versant... ich denke jetzt an sowas wie smtp.yahoo.de
Gast

Es FUNKTIONIERT :D
hier der Quelltext den ich mit eurer Hilfe hinbekommen habe!

import tkFileDialog, smtplib, tkMessageBox
from os.path import exists
from pickle import*

def abschicken(self):
self.gibs=exists("C:\WINDOWS\Profiles\Martin\Eigene Dateien\Facharbeit\Programm\daten.txt")
if self.gibs==True:
daten=file('C:\\WINDOWS\\Profiles\\Martin\\Eigene Dateien\\Facharbeit\\Programm\\daten.txt', 'r')
self.liste=load(daten)
msg='From: %s\r\nTo: %s\r\nSubject: %s\r\n'\
%(self.liste[0], self.toaddr.get(), self.betreff.get())
msg+='Mime-Version: 1.0\r\nContent-Type: '\
+'text/html\r\n'\
+'Content-Transfer-Encoding: '\
+'quoted-printable\r\n'\
+self.text.get('1.0', END)
self.client=smtplib.SMTP(self.liste[4])
self.client.login(self.liste[5],self.liste[6])
self.client.set_debuglevel(1)
self.client.sendmail(self.liste[0],
self.toaddr.get(), msg)
self.client.quit()

Tausend Dank!
Antworten