simplemail.py und SSL

Code-Stücke können hier veröffentlicht werden.
Antworten
Alexci
User
Beiträge: 44
Registriert: Dienstag 18. April 2006, 23:08

Hallo!

Ich habe ne kurze frage ueber emails versenden mit simplemail.py. Was wenn der email server eine "secure connecton (SSL)" benoetignt? Kann man auch dann emails versenden? Z.b. ueber Gmail?


Hier der code:

Code: Alles auswählen

from simplemail import Email 
import time
import os
import pythoncom

email = Email( 
    from_address = "meineemailadresse@gmail.com",
    from_caption = "Name",
    smtp_server      = "smtp.gmail.com:465",
    smtp_user        = "user",
    smtp_password    = "Password",
    to_address = "to-adresse", 
    subject = "Gmail test", 
    message = "Test"
)
email.send()

Und hier die errormeldung:

Traceback (most recent call last):
File "C:/Program Files/Python24/Lib/sendemail_gmail.py", line 17, in -toplevel-
email.send()
File "C:\Program Files\Python24\Lib\simplemail.py", line 522, in send
smtp.connect(self.smtp_server)
File "C:\Program Files\Python24\lib\smtplib.py", line 304, in connect
(code, msg) = self.getreply()
File "C:\Program Files\Python24\lib\smtplib.py", line 345, in getreply
line = self.file.readline()
File "C:\Program Files\Python24\lib\socket.py", line 340, in readline
data = self._sock.recv(self._rbufsize)
error: (10054, 'Connection reset by peer')





Danke!


Mit freundlichen Gruessen,
Aleksandar
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Alexci hat geschrieben:"secure connecton (SSL)"
Hallo Aleksandar!

Nein, SSL ist in simplemail.py nicht eingebaut. Ich habe damit auch keine Erfahrung. Die Python-Hilfe zu SMTP bringt die Methode ``starttls`` zum Vorschein. Damit könnte es funktionieren, eine TLS-Verbindung aufzubauen.
Python-Hilfe hat geschrieben:starttls( [keyfile[, certfile]])

Put the SMTP connection in TLS (Transport Layer Security) mode. All SMTP commands that follow will be encrypted. You should then call ehlo() again.
If keyfile and certfile are provided, these are passed to the socket module's ssl() function.
Das musst du dir aber selber einbauen und ausprobieren.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

gerold hat geschrieben:Das musst du dir aber selber einbauen und ausprobieren.
...Zumindest musst du es selber ausprobieren. Siehe: http://www.python-forum.de/post-66374.html#66374

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Alexci
User
Beiträge: 44
Registriert: Dienstag 18. April 2006, 23:08

Hallo!

Erstmal danke an Gerold, dass Sie immer Zeit haben um meine Fragen zu beantworten :D

Das neue Modul funktioniert nicht ganz... da fehlt ein teil, im vergleicht zu der alten Version (z.b. __slots__ im class Email()) und da gibt es auch einige bugs im def testen()...

Aber ich habe starttls( [keyfile[, certfile]]) ausprobiert... der Process bleibt einfach stecken... es kommt keine Errormeldung und es passiet nichts... ich werde es mir in den naechsten genauer ansehen und melde mich falls ich was neues herausfinde...


Mit freundlichen Gruessen,
Aleksandar
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Alexci hat geschrieben:da fehlt ein teil, im vergleicht zu der alten Version (z.b. __slots__ im class Email())
``__slots__`` wird keiner vermissen, da es keine besondere Funktion gehabt hatte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Alexci hat geschrieben:Das neue Modul funktioniert nicht ganz...
[...]
... der Process bleibt einfach stecken... es kommt keine Errormeldung und es passiet nichts...
Hallo Aleksandar!

Die üblichen Funktionen des Moduls habe ich getestet. Diese funktionieren bei mir wie erwartet. Der Fehler, den das Testskript produziert, ist erwünscht. Es wird damit getestet, ob es einen Fehler gibt, wenn eine falsche Adresse übergeben wird.

Die "__slots__" habe ich entfernt, da diese für simplemail.py keinen Vorteil bringen.

Dass der Prozess einfach hängen bleibt, könnte daran liegen, dass ich vergessen habe, den Login erst nach ``starttls()`` durchzuführen. Das habe ich in der neuen Version ausgebessert, die hier zur Verfügung steht: http://gelb.bcom.at/trac/simplemail/bro ... plemail.py

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Alexci
User
Beiträge: 44
Registriert: Dienstag 18. April 2006, 23:08

Hallo!

Stimmt, an dem "__slots__" lag es doch nicht, bei mit war ein bug :oops: ...

Ich habe es nochmal getestet, funktioniert immer noch nicht... als haette starttls() keinen einfluss... bleibt immer noch haengen, wie als wuerde man in Outlook Express SSL ausschalten... dann passiert auch nix, der kann sich nicht verbinden und versucht es unbegrenzt (gut, im Outlook Express nicht unbegrentzt, dort gibt es eine Zeitbeschraenkung)...

Kann es sein dass da was doch in die starttls() klammern rein muss?


Danke!

Mit freundlichen Gruessen,
Aleksndar Cikota
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Alexci hat geschrieben:bleibt immer noch haengen
Hallo Alexci!

So etwas kann man nicht ohne einen richtigen Test mit Googlemail programmieren. :? Ich habe mir ein Konto bei Gmail erstellt und damit getestet. Zwei zusätzliche ``smtp.ehlo()`` an der richtigen Stelle platziert und jetzt funktioniert ``simplemail.py`` auch mit Gmail:

http://www.python-forum.de/post-66534.html#66534

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten