Wie extrahiere und sortiere ich Bildanhänge aus E-Mails?

1193
Markus

Hier ist was ich dachte:

Ich möchte einen Raspberry Pi Picture-Frame (DPF) für meine Oma erstellen, jedoch mit grundlegender E-Mail-Unterstützung. E-Mails können von sechs Familienmitgliedern verschickt werden und werden täglich über fetchmail / procmail empfangen. Das funktioniert schon!

In /home/pi/Mail/Ich habe jetzt drei Dateien (eine für jede E - Mail mit Anhängen):

  • msg.nTIB
  • msg.pTIB
  • msg.oTIB

Ich möchte jetzt SENDER, SUBJECT (, TEXT) und ATTACHMENT aus jeder Datei extrahieren, um das Attachment-Image umzubenennen und den Text mit imagemagick (noch nicht enthalten) hinzuzufügen.

for file in msg.*; do export SENDER=`tee $file | formail -zxFrom: -zxReply-To:|cut -fs- -d'<'|cut -f1 -d'>'` SUBJECT = `/bin/cat $file | formail -zxSubject:`  if grep -qxis $SENDER /home/pi/Mail/.markus; then SENDER2=Markus fi if grep -qxis $SENDER /home/pi/Mail/.someone; then SENDER2=Someone fi  /bin/mkdir -p /home/pi/Mail/$SENDER2 >/dev/null  munpack -C /home/pi/Mail/$SENDER2 $file /bin/cat $file /bin/rm $file done 

Das grepund munpackTeil funktioniert gut, aber die Extraktion von SENDER und SUBJECT funktioniert nicht, wenn ich die Sh-Datei starte. Es sieht einfach so aus, als sei es erstarrt. Ich kann es nur mit ctrl- abbrechen c!

Ich weiß nicht warum, wenn ich die Zeilen 2 und 3 in meinen .procmailrceinfüge, funktioniert das ohne Probleme.

Ich meine, dies ist eine irgendwie grundlegende Aufgabe und keine Zauberei, aber ich konnte mit Google nichts hilfreiches finden :/

Jede Hilfe wird geschätzt! Vielleicht haben Sie eine andere Lösung. Ich bin absolut kein Linux-Experte, also halte es vielleicht ein bisschen einfach:)

1

1 Antwort auf die Frage

1
tripleee

Sowohl das catals auch das teesind nutzlos ; das teedoppelt so und der Grund für (was Sie als wahrnehmen) das Skript einfriert. Es erfordert ein Dateinamenargument, wie die Datei, in die die Eingabe kopiert werden soll, und einen Text- oder Datenstrom in der Standardeingabe, die natürlich nicht empfangen wird, sodass sie dort abgelegt wird.

Außerdem sollten Sie Ihre Variablen generell zitieren .

Die SENDERExtraktion ist problematisch. Soll die Variable wirklich zwei Zeichenfolgen enthalten? Normalerweise können Sie einfach formail -rtzxTo: <"$file"ein gesundes Ergebnis erzielen und erzielen. (Die -tOption hat etwas undeutliche Semantik, aber aus diesem cutGrund macht sie wahrscheinlich das Richtige.) Dadurch werden auch die lästigen s beseitigt, nur den E-Mail-Terminus zu erhalten (da dies formailim Antwortgenerierungsmodus bereits für Sie gilt).

Schließlich sherlaubt die Syntax kein Leerzeichen um das Gleichheitszeichen in Zuweisungen.

for file in msg.*; do SENDER=$(formail -zxFrom: -zxReply-To: <"$file" | cut -fs- -d'<'|cut -f1 -d'>') SUBJECT=$(formail -zxSubject: <"$file")  if grep -qxis "$SENDER" /home/pi/Mail/.markus; then SENDER2=Markus elif grep -qxis "$SENDER" /home/pi/Mail/.someone; then SENDER2=Someone fi  mkdir -p /home/pi/Mail/"$SENDER2" munpack -C /home/pi/Mail/"$SENDER2" "$file" cat "$file" rm "$file" done 

Ich habe auch die vollständigen Pfade aus den Befehlsnamen entfernt (Sie sollten PATHstattdessen sicherstellen, dass Sie gesund sind) und von der `obsolescent`Prozessersetzungssyntax auf geändert $(modern). mkdir -pläuft leise, also entfernte ich die Ausgabeumleitung davon.

Der Komplex grepkönnte durch ein einfaches Mapping ersetzt werden, etwa wie folgt:

SENDER2=$(awk -v who="$SENDER" ' $1 == who { print $2; x=1 } END { exit 1-x }' <<'________HERE' msmith@dmel.example.com Markus someone@there.example.net Someone ________HERE 

Dies macht Vermutungen darüber, was Sie in den Dateien haben, aus denen Sie gerade suchen, aber Sie sollten die Idee bekommen. Dies löst immer noch nicht die Einstellung, SENDER2wenn der Absender nicht gespeichert ist. Aber vielleicht sollte das Skript diese Dateien aus Sicherheitsgründen ganz ablehnen?

Es tut mir leid für meine späte Antwort, das obige Skript hat sehr gut funktioniert! Das folgende Skript, eine sehr nette Lösung, funktioniert jedoch nicht richtig. Ich denke, da fehlt etwas, aber ich konnte es nicht reparieren. Und ja, wenn der Absender unbekannt ist, sollte die E-Mail abgelehnt werden. Ich möchte nicht, dass meine Oma Spam oder D *** Bilder bekommt;) Markus vor 9 Jahren 0
Entschuldigung wegen des Problems mit dem zweiten Skript. Ohne weitere Diagnosen kann ich nicht viel tun. Vielleicht solltest du eine neue Frage mit etwas Diagnose etc. posten? Wahrscheinlich eine gute Idee, um einen Link auf diese Frage einzufügen. tripleee vor 9 Jahren 0