poplib und smtplib mit ssh-Support

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Freitag 6. Mai 2005, 11:46

Hallo Leute

da mir mein Kumpel freundlicherweise Platz und Rechenleistung auf seinem Server zur Verfügung stellt, habe ich angefangen diesen auch gewinnbringend mit CGI-Scripting und anderen Dauerlauf-Scripts nutzen zu wollen.

Das Script an dem ich momentan arbeite, soll mir alle Mails von meinen wild verteilten Accounts sammeln (so alle 15 Min. oder so), From, Subject und Body extrahieren und diese dann an den Mailserver meines Handyanbieters weiterleiten, damit ich die Nachrichten dann gratis auf mein Handy runterladen kann (da Datenverkehr auf andere Server kostet...).

Das Problem ist nun, dass einer meiner Mail-Accounts nur eine Verbindung per SSH erlaubt (mein Kumpel ist halt sehr vorsichtig) und dieses anscheinend nicht direkt in die poplib und smtplib integriert ist.

Gibt es da bereits was vorprogrammiertes, oder muss ich das selber implementieren? Sollte ja eigentlich möglich sein mit dem ssh Modul von Python.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 6. Mai 2005, 12:04

Meinst du SSH oder SSL? Oder gar TLS?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Freitag 6. Mai 2005, 12:25

Leonidas, du bist ja schlimmer als die Eingabelorrektur von Google :D

Ich hätte eigentlich SSL meinen sollen...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 6. Mai 2005, 12:30

Clython hat geschrieben:Leonidas, du bist ja schlimmer als die Eingabelorrektur von Google :D
Meinten Sie: Eingabekorrektur SCNR.. ja, ich weiß, ich bin schon schlimm :D
Clython hat geschrieben:Ich hätte eigentlich SSL meinen sollen...
Dazu gibt es dieses tolle TLS Lite (nicht vom Namen verwirren lassen, geht auch mit SSL), die man mit der poplib und der smtplib verbinden kann.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Freitag 6. Mai 2005, 12:43

Woohooo! Genau das habe ich gesucht!
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Freitag 6. Mai 2005, 13:17

Dank Leonidas hab ich einen Teil meines Problems gelöst. Leider bin ich inzwischen auf ein Problem mit der smtplib gestossen:

Code: Alles auswählen

def forward_mails(forward, recipient, mailserver_smtp, mailuser, mailpasswd):
    for mail in forward:
        From = mail[0]
        To = recipient
        Subj = "PyDe-Fwd:" + mail[1]
        Text = mail[2]
        # prepend standard headers
        date = time.ctime(time.time())
        text = ('From: %s\nTo: %s\nDate: %s\nSubject: %s\n%s' 
                                % (From, string.join(To, ';'), date, Subj, Text))
        print text
        print 'Connecting...'
        server = smtplib.SMTP(mailserver_smtp)
        print "Connected"
        server.login(mailuser, mailpasswd)
        print "Logged in"              # connect, no login step
        failed = server.sendmail(From, To, Text)
        server.quit() 
        if failed:                                     # smtplib may raise exceptions
            print 'Failed recipients:', failed         # too, but let them pass here
        else:
            print 'No errors.'
        print 'Bye.'
erzeugt folgenden Fehler:
Connecting...
Traceback (most recent call last):
File "mail-pyde.py", line 117, in ?
forward_mails(forward, "vindicare@orangemail.ch", mailserver_smtp, mailuser, mailpasswd)
File "mail-pyde.py", line 88, in forward_mails
server = smtplib.SMTP(mailserver_smtp)
File "/usr/lib/python2.3/smtplib.py", line 254, in __init__
addr = socket.gethostbyname(socket.gethostname())
socket.gaierror: (-2, 'Name or service not known')
Wenn ich die letzte Zeile google, krieg ich auch nichts hilfreiches dabei. Was ist das Problem?

Edit: Hab das gefunden: http://www.python.org/cgi-bin/faqw-mm.p ... 06.014.htp Hat aber eher mit einer Mailanfrage auf einen localhost zu tun und hilft auch nicht mit meinem Problem weiter...
Zuletzt geändert von Clython am Freitag 6. Mai 2005, 13:37, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 6. Mai 2005, 13:34

Zuerst ein Code Snippet zum Verständnis:

Code: Alles auswählen

>>> import socket
>>> socket.gethostbyname('abc')
# gibt gaierror
>>> socket.gethostname()
'sparc'
>>> socket.gethostbyname(socket.gethostname())
'192.168.123.2'
Also, so wie ich sehe, kommt ein gaierror immer dann wenn man den Hostnamen nicht auflöson kann. Bist du sicher, dass bei dir der Mailserver richtig angegeben ist?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Freitag 6. Mai 2005, 13:38

mail.gmx.net sollte schon stimmen, oder?

Edit:
>>> import socket
>>> socket.gethostbyname('mail.gmx.net')
'213.165.64.20'

Das funktioniert...

>>> socket.gethostbyname(socket.gethostname())
Traceback (most recent call last):
File "<stdin>", line 1, in ?
socket.gaierror: (-2, 'Name or service not known')

Das nicht???

Warum zur Hölle muss dieser Aufruf die lokale IP angeben, tut es aber nicht?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 6. Mai 2005, 15:53

Was sagt socket.gethostname()?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Freitag 6. Mai 2005, 16:28

Hab das Problem mit Hilfe meines Kumpels gelöst. Linux war falsch konfiguriert. Wer das Problem hast muss die Richtigkeit von: /etc/hosts, /etc/hostnames und /etc/dnsdomainname überprüfen.

Trotzdem danke Leonidas, du hast mich darauf gebracht, dass das Problem nicht bei Python lag...
Antworten