E-Mails per Bash abfragen, Problem mit echo + openssl

Hallo HaBo,

ich möchte meine E-Mails per pop3 abrufen, bzw. dort checken, wie viele ich habe. Das wäre an sich ja kein Problem, jedoch habe ich Spezialwünsche :D.
- Ich möchte meine E-Mails per Bash-Kommando abfragen
- Ich möchte, dass mein Skript ausgeführt werden kann, ohne dass ich selbst noch Sachen eingeben muss.

Die Grundidee ist diese:

Connect mit pop.googlemail.com (Port 995) per openSSL:

Code:
:~ /usr/bin/openssl s_client -quiet -connect pop.gmail.com:995 2>/dev/null
#Ausgabe: +OK Gpop ready for requests from 212.88.132.114 b17pf111071fka.0
USER bla@googlemail.com
#Ausgabe: +OK send PASS
PASS blablabla
#Ausgabe: +OK Welcome.
STAT
#Ausgabe: +OK 220 44140516 (bedeutet, ich habe 220 E-Mails)
QUIT
#Ausgabe: +OK Farewell.

So, wie ich das geschrieben habe, muss ich jedoch nach jeder Ausgabe etwas eingeben (User, Passwort, Stat-Befehl etc.). Nun möchte ich, dass an das openSSL-kommando die Befehle gleich übergeben werden. Xalon im #hackerboard hatte folgenden Vorschlag, zur besseren Übersicht habe ich den Befehl mal auf zwei Zeilen verteilt:

Code:
echo -e -n "USER bla@googlemail.com\nPASS blablabla\nSTAT\nQUIT\n" |
          /usr/bin/openssl s_client -quiet -connect pop.gmail.com:995 2>/dev/null
#Ausgabe: +OK Gpop ready for requests from 212.88.132.114 b17pf111071fka.0

Das zeigt, dass openSSL die Echo-Ausgabe nicht schluckt. Es bleibt nach dem connecten hängen. Jedenfalls war das Xalons Vermutung.

Hat jemand eine Idee, wie das funktionieren könnte? Danke schonmal im Voraus.


Lightmaster
 
Schau dir mal expect an. Damit kannst du die Eingaben automatisieren. Ist in solchen Fällen meist recht brauchbar.
 
@lookshe: hmm, ok, das hatte ich dann wohl nicht so ganz registriert -.-

@beide: danke, ich probiers gleich aus

EDIT: So, ich habs jetzt einigermaßen hinbekommen. Das Problem war zuerst, dass "spawn" in expect den openssl-befehl nicht starten konnte. ich wurde immer auf die richtige verwendung der s_client-args verwiesen. Dann habe ich den Befehl in eine eigene Skriptdatei geschrieben, und er funktionieret...

Das expect-Skript Expect.sh
Code:
#! /usr/bin/expect
spawn ./StartOpenSSL.sh
expect "+OK Gpop ready for requests *" { send "USER bla@gmail.com\n" }
expect "+OK send PASS" { send "PASS blablabla\n" }
expect "+OK Welcome" { send "STAT\n" }
expect "+OK *" { send "QUIT\n" }

und das Bash-Skript StartOpenSSL.sh
Code:
#! /bin/bash
/usr/bin/openssl s_client -quiet -connect pop.gmail.com:995 2>/dev/null


Wenn jemand eine Ahnung hat, warum im Expect-Skript diese Anweisung nicht funktioniert, kann er sich ja vielleicht melden:
Code:
spawn /usr/bin/openssl s_client -quiet -connect pop.gmail.com:995 2>/dev/null
 
Erstell dir doch dein expect-Skript einfach mit autoexpect. Da wirst du ja den Unterschied sehen, der beim spawn gemacht wird.
 
Zurück
Oben