ubuntuusers.de

bash script für IMAP Abfrage?

Status: Gelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

weakbit

Anmeldungsdatum:
18. Dezember 2011

Beiträge: Zähle...

Hallo, ich möchte per cron und einem kleinen script einfach meinen IMAP email-Server Rücksichern.

ich habe das Problem das der erste Befehl ausgeführt wird aber der "login" Befehl wird nicht in die openssl hinein geleitet und nicht als Befehl erkannt.

~/email/gmx_email.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash

echo "openssl => gmx.net"

openssl s_client -connect imap.gmx.net:993 &

sleep 2s

tag0 login email@gmx.net emailpasswd &

tag1 select inbox &

tag2 list "" "*" &

die Antwort des Systems ist:

[1]+  Angehalten              openssl s_client -connect imap.gmx.net:993

[2]   Exit 127                tag0 login email@gmx.net emailpassword

[3]   Exit 127                tag1 select inbox

[4]   Exit 127                tag2 list "" "*"

Warum wird der opennssl angehalten? Was bedeutet [Exit 127]? - was ist das für ein Error?

nun starte ich die bash mit ~/email$ . ./gmx_email.sh ich habe von einem Freund gehört das ich den script mit . ./ starten muss da die bash sonst im Hintergrund eine 2. unsichtbare Bash aufmacht und mir den Befhel in Zeile 2 nicht in das openssl hineinleitet.

Wie kann ich nun der bash sagen das es sich hier um einen Befehl handelt der ind ie bash gehen soll? Der bleibt stehen und nichts geschieht die Eingabe des Befehls "tag login email@gmx.net emailpasswd" wird nie aufgerufen. Wenn ich nun mit Ctrl+C unterbreche sagt er das es kein Befehl ist da der openssl nicht mehr läuft.

??? was soll ich da mitteilen?

MfG weakbit

Bearbeitet von rklm:

Formatierung. Bitte die Forum/Syntax beachten!

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14332

weakbit schrieb:

Wie kann ich nun der bash sagen das es sich hier um einen Befehl handelt der ind ie bash gehen soll?

Das ist kein Befehl für die bash. Das ist ein Befehl für das s_client-Programm (aus openssl).

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13192

weakbit schrieb:

Warum wird der opennssl angehalten?

Vermutlich, weil der Prozess versucht, eine Eingabe von Stdin zu lesen.

$ read foo && echo $foo &
[1] 11815
$ jobs -l
[1]+ 11815 Stopped (tty input)     read foo && echo $foo

Siehe lubux Antwort.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14332

weakbit schrieb:

??? was soll ich da mitteilen?

Du könntest die Befehle an das s_client-Programm, mit Hilfe einer Text-Datei, cat und einer pipe übergeben. Z. B.:

cat login_s_client.txt | openssl s_client -quiet -tls1_2 -connect imap.gmx.net:993

login_s_client.txt

? LOGIN <user> <password>
? LIST "" "*"
? EXAMINE INBOX
? LOGOUT

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13192

lubux schrieb:

Du könntest die Befehle an das s_client-Programm, mit Hilfe einer Text-Datei, cat und einer pipe übergeben. Z. B.:

cat login_s_client.txt | openssl s_client -quiet -tls1_2 -connect imap.gmx.net:993

Useless use of cat award!

1
openssl s_client -quiet -tls1_2 -connect imap.gmx.net:993 <login_s_client.txt

Außerdem: das Programm expect könnte auch helfen.

weakbit

(Themenstarter)

Anmeldungsdatum:
18. Dezember 2011

Beiträge: 45

Hallo,

gut das ge-Pipe funktioniert einmal mit einem fremden login.txt file. logout hab ich vergessen das musss ich noch machen.

tag0 OK LOGIN completed

* LIST (\Archive \HasNoChildren) "/" Archiv

* LIST (\HasNoChildren) "/" Drafts

* LIST (\Drafts \NoInferiors) "/" Entw&APw-rfe

* LIST (\Trash \HasNoChildren) "/" Gel&APY-scht

* LIST (\Sent \NoInferiors) "/" Gesendet

* LIST (\HasNoChildren) "/" INBOX

* LIST (\HasNoChildren) "/" Junk

* LIST (\NoInferiors) "/" OUTBOX

* LIST (\HasNoChildren) "/" Sent

* LIST (\Junk \NoInferiors) "/" Spamverdacht

* LIST (\HasNoChildren) "/" Trash

tag1 OK LIST completed

* STATUS INBOX (MESSAGES 1553)

tag2 OK STATUS completed

* STATUS INBOX (RECENT 0)

tag3 OK STATUS completed

* STATUS INBOX (UNSEEN 18)

tag4 OK STATUS completed

* BYE timeout

Wie kann ich jetzt die STATUS Antworten zurücklesen und Comparen? Ich will z.B. den STATUS INBOX (MESSAGE 1553) die Zahl '1553' der variabeln messages zuweisen. Wie kann ich in einer 2.Zeile in meinem bash script dem s_clienten etwas schicken die Verbindung steht laut netstat -anput aber ich will keine 2.Verbindung aufmachen. Bin leider in openssl neu was macht eigentlich -quiet? das hört sich für mich an wie Quit.

Gibt es ein Standart Verfahren wie bei einem SSH Socket das man dem openssl etwas schickt wie soll ich z.B. Comparen vor dem Download und wie lade ich die email herunter in eine File? emailneuer >> empfangsfile // so eine funktion benötige ich beim empfangen.

MfG weakbit

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14332

weakbit schrieb:

Wie kann ich jetzt die STATUS Antworten zurücklesen und Comparen? Ich will z.B. den STATUS INBOX (MESSAGE 1553) die Zahl '1553' der variabeln messages zuweisen. Wie kann ich in einer 2.Zeile in meinem bash script dem s_clienten etwas schicken die Verbindung steht laut netstat -anput aber ich will keine 2.Verbindung aufmachen. Bin leider in openssl neu was macht eigentlich -quiet? das hört sich für mich an wie Quit.

Gibt es ein Standart Verfahren wie bei einem SSH Socket das man dem openssl etwas schickt wie soll ich z.B. Comparen vor dem Download und wie lade ich die email herunter in eine File? emailneuer >> empfangsfile // so eine funktion benötige ich beim empfangen.

Z. B. mit:

openssl s_client -quiet -tls1_2 -connect imap.gmx.net:993 <login_s_client.txt | grep -i recent

und mit:

openssl s_client -quiet -tls1_2 -connect imap.gmx.net:993 <get_mail.txt > empfangs-file.txt

bei einer get_mail.txt-Datei:

? LOGIN <user> <password>
? EXAMINE INBOX
? FETCH <Nr> BODY[]
? LOGOUT

<Nr> ist die Nummer (Reihenfolge) der eMail in der INBOX.

"quiet" kommt nicht von openssl, sondern von s_client. Siehe die manpage von s_client betr. der Bedeitung von quiet. quiet ist nicht quit. Betr. den Unterschied in der Bedeutung und in der Aussprache, siehe z. B. bei http://dict.leo.org (oder gleichwertig).

weakbit

(Themenstarter)

Anmeldungsdatum:
18. Dezember 2011

Beiträge: 45

@lubux && @rklm Danke! das mit dem quiet wusste ich nicht habe das zum ersten mal gesehen. 👍

So eine Art der Lösung:

~/email/gmx_email.sh
#!/bin/bash
clear
set $(date +%d.%m.%Y" "%H:%M:%S);
echo "$1 $2 openssl => gmx.net"  > ~/email/status_log
cat ~/email/login_s_client.txt | openssl s_client -quiet -tls1_2 -connect 
imap.gmx.net:993 >> ~/email/status_log
cat ~/email/status_log

Ich lasse alle paar Minuten aus einem cron die gmx_email.sh abarbeiten und speichere sie in einem immer wieder überschreibenden file Namens status_log. In diesem file kann ich mit einem kleinen Programm nachschauen was sich verändert hat. Wenn sich etwas verändert hat hole ich die email vom gmx email Server ab und speichere sie an 2 verschiedenen Orten.

Im file login_s_client.txt stehen die Commands die der ssl gepiped bekommt drinnen.

~/email/login_s_client.txt
tag0 login emailadresse emailpasswd
tag1 list inbox (messages)
tag2 list inbox (recent)
tag3 list inbox (unseen)
tag4 logout

Im Prinzip eine Einfache Ablaufsteuerung die man sich an seine Bedürftnisse anpassen kann. ich mache aus den scripten verschiede Abfragen.

MfG weakbit

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14332

weakbit schrieb:

Im Prinzip eine Einfache Ablaufsteuerung die man sich an seine Bedürftnisse anpassen kann.

Ja, ... dann könntest Du ja deine konkrete Lösung hier posten und diesen deinen Thread, auch als gelöst markieren.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13192

Warum benutzt Du eigentlich nicht fetchmail?

weakbit

(Themenstarter)

Anmeldungsdatum:
18. Dezember 2011

Beiträge: 45

fetchmail stürtz in openssl ab! egal was ich da mache z.B. tag fetch 5 body oder tag fetch 5 (822) beides stürtzt ab da bleibt der script aus unerklärbarem Grund stecken und ich sthee in der ps im wait.

Super aber warum?

LG weakbit

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13192

weakbit schrieb:

fetchmail stürtz in openssl ab!

Was bedeutet "in openssl"? fetchmail kann doch selbst SSL-Verbindungen öffnen. Oder meinst Du das?

beides stürtzt ab da bleibt der script aus unerklärbarem Grund stecken und ich sthee in der ps im wait.

Vermutlich auf IO. Oder, wenn Du openssl mit -quiet nutzt, könnte Dir auch -ign_eof einen Streich spielen.

Super aber warum?

Gibt es keine Fehlermeldungen - nicht mal im Verbose-Modus? Man müsste schon genauer wissen, was Du machst und welche Fehler kommen.

Antworten |