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.
poplib und smtplib mit ssh-Support
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Meinten Sie: Eingabekorrektur SCNR.. ja, ich weiß, ich bin schon schlimmClython hat geschrieben:Leonidas, du bist ja schlimmer als die Eingabelorrektur von Google![]()

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.Clython hat geschrieben:Ich hätte eigentlich SSL meinen sollen...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dank Leonidas hab ich einen Teil meines Problems gelöst. Leider bin ich inzwischen auf ein Problem mit der smtplib gestossen:
erzeugt folgenden Fehler:
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...
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.'
Wenn ich die letzte Zeile google, krieg ich auch nichts hilfreiches dabei. Was ist das Problem?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')
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Zuerst ein Code Snippet zum Verständnis:
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?
Code: Alles auswählen
>>> import socket
>>> socket.gethostbyname('abc')
# gibt gaierror
>>> socket.gethostname()
'sparc'
>>> socket.gethostbyname(socket.gethostname())
'192.168.123.2'
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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?
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?
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...
Trotzdem danke Leonidas, du hast mich darauf gebracht, dass das Problem nicht bei Python lag...