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
Clython hat geschrieben:Leonidas, du bist ja schlimmer als die Eingabelorrektur von Google![]()
Meinten Sie: Eingabekorrektur SCNR.. ja, ich weiß, ich bin schon schlimm

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
Dank Leonidas hab ich einen Teil meines Problems gelöst. Leider bin ich inzwischen auf ein Problem mit der smtplib gestossen:
erzeugt folgenden Fehler:
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.py?req=edit&file=faq06.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.'
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.py?req=edit&file=faq06.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.
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'
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
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?
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder