Seite 1 von 1

Warum sendet er die E-Mails nicht?

Verfasst: Mittwoch 11. Februar 2004, 16:47
von 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')

Verfasst: Mittwoch 11. Februar 2004, 23:05
von Sneaker
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 ;)

Verfasst: Donnerstag 12. Februar 2004, 11:30
von Milan
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

Verfasst: Donnerstag 12. Februar 2004, 16:16
von 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!

Verfasst: Donnerstag 12. Februar 2004, 16:34
von Milan
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

Verfasst: Donnerstag 12. Februar 2004, 16:52
von 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!

Verfasst: Donnerstag 12. Februar 2004, 17:26
von Sneaker
ich denk mal das yahoo.de ne subdomain hat für den email versant... ich denke jetzt an sowas wie smtp.yahoo.de

Verfasst: Freitag 13. Februar 2004, 16:30
von 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!