ubuntuusers.de

Mail mit Anhang per Script versenden

Status: Gelöst | Ubuntu-Version: Kubuntu 10.04 (Lucid Lynx)
Antworten |

Nobuddy

(Themenstarter)
Avatar von Nobuddy

Anmeldungsdatum:
2. September 2005

Beiträge: 6990

Wohnort: 29614 Soltau

Danke für Deine ausführliche Erklärung, dies hilft mir sehr für ein besseres Verständnis.

Das Beispiel mit dem Buch ist wirklich gut .... 👍

Gut zu wissen, auch das mit den Backsticks und wie sich das besser gestalten lässt und vor allem auch portabel für andere Shells ist.

Ich habe beides in meinem Script umgesetzt. 😉

Ich markiere mal den Thread als gelöst, freue mich aber auch für weiteren Input.

Grüße Nobuddy

Nobuddy

(Themenstarter)
Avatar von Nobuddy

Anmeldungsdatum:
2. September 2005

Beiträge: 6990

Wohnort: 29614 Soltau

Muß mich jetzt doch nochmals melden, da ich pro Mail 1 Anhang versenden möchte, egal wieviel Anhänge vorhanden sind.

So sieht der Bereich meines Scriptes momentan aus, den das betrifft:

    # EMail-Versand
    SUBJECT="Bestellung"
    EMAIL="Lieferant@Lieferant.de"
    EMAILANHANG="$H2/*.ASC"

    # Wenn keine Dateien im Verzeichnis sind, dann versuche nicht, eine
    # Datei namens "*" zu versenden.
    shopt -s nullglob

      # Verschicke jede Datei einzeln. Bei Erfolg, verschiebe sie.
      for i in "$H2/*.ASC"
      do
	 echo "$SUBJECT, $(date)" | mutt -s $SUBJECT -a $EMAILANHANG -- $EMAIL

	 if (( $? == 0 ));then
	      rm -v "$i"
	      zenity --info --text "EMail-Bestellung(en) wurde versendet!"
	 else
	      zenity --info --text "Fehler beim Senden der Mail für Datei $i!"
	      echo "Fehler beim Senden der Mail für Datei $i." >&2
	      exit 1
	 fi
      done

Statt einem Anhang werden immer alle in einer Mail versendet.

Der Anhang soll nach erfolgreichem Versenden aus dem Ordner $H2 gelöscht werden.

Ich habe schon verschiedene Variationen ausprobiert, aber der gewünschte Erfolg blieb aus.

Wo liegt der Fehler, bzw. müsste es aussehen, daß es funktioniert?

Grüße Nobuddy

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Naja, als Anhang wird das verschickt, was du mutt hinter dem Parameter -a übergibst. Im Moment hast du da wohl den kompletten Inhalt des $H2-Ordners stehen. Die for-Schleife iteriert über alle Dateien des Ordners. In $i steht also jeweils eine Datei – das ist es wohl, was du willst, also müsstest du $EMAILANHANG durch "$i" ersetzen (auf die Anführungszeichen achten).

Es empfiehlt sich übrigens, auch $SUBJECT und $EMAIL in Anführungszeichen zu setzen, um deren Inhalt zu schützen (siehe auch hier). Hättest du beispielsweise ein Leerzeichen in $SUBJECT, ginge es schief.

Nobuddy

(Themenstarter)
Avatar von Nobuddy

Anmeldungsdatum:
2. September 2005

Beiträge: 6990

Wohnort: 29614 Soltau

Das mit "$i" statt $EMAILANHANG hatte ich auch schon versucht, Mail lässt sich nicht verschicken und es kommt die Fehlermeldung "Fehler beim Senden der Mail für Datei $i!".

Ich habe jetzt auch $SUBJECT; $EMAILANHANG usw. in Anführunszeichen gesetzt, obwohl keine Leerzeichen darin enthalten sind.

Leider auch hier, hat sich dadurch nichts geändert, bis mir im Terminal die Ausgabe

Gtk-Message: Failed to load module "canberra-gtk-module": libcanberra-gtk-module.so: cannot open shared object file: No such file or directory

auffiel.

Ich habe dann das Paket libcanberra-gtk-module installiert und danach hat auch das Versenden von 1 Anhang pro Mail funktioniert.

Vielleicht hängt das mit zenity zusammen, das ich für die Ausgabe bestimmter Infos verwende, da wenn das Script einwandfrei funktioniert, nicht mehr über das Terminal ausgeführt werden soll, sondern über ein entsprechendes Button.

Grüße und Danke nochmals für Deine Hilfe 😉

Nobuddy

Nobuddy

(Themenstarter)
Avatar von Nobuddy

Anmeldungsdatum:
2. September 2005

Beiträge: 6990

Wohnort: 29614 Soltau

Ein weiteres Problemchen ist dies:

if [ ! -f $H/$DN ];then
    if [ "$H2/*" != *".ASC" ];then
    zenity --info --text "Es ist existiert keine neue Bestell-Datei zur Fertigstellung! \
Bitte erstellen Sie zuerst die Bestell-Datei, um mit der Bestellung fortfahren zu können!"
    exit 0
    fi
fi

if [ ! -f $H/$DN  ];then
    if [ "$H2/*" = *".ASC" ];then
    zenity --info --text "Es ist existiert keine neue Bestell-Datei zur Fertigstellung, \
aber es sind noch fertige Bestellungen zum Versenden vorhanden!"
    kate "$H2"/*
    fi
fi

Die erste if-Abfrage, soll bewirken, daß wenn keine neue Bestell-Datei $H/$DN und in $H2 keine Datei *.ASC existiert, die Info erscheint.

Die zweite if-Abfrage, soll bewirken, daß wenn keine neue Bestell-Datei $H/$DN aber in $H2 eine oder mehrere Datei(en) *.ASC existieren, die Info erscheint.

Aber irgendwie bekomme ich das nicht hin, obwohl ich schon Verschiedenes ausprobiert habe.

Nobuddy

(Themenstarter)
Avatar von Nobuddy

Anmeldungsdatum:
2. September 2005

Beiträge: 6990

Wohnort: 29614 Soltau

Habe das Problem selbst lösen können:

Z0=$(ls  "$H2" | wc -l)

if [ ! -f $H/$DN ];then
    if [ "$Z0" = 0 ];then
    zenity --info --text "Es ist existiert keine neue Bestell-Datei zur Fertigstellung! \
Bitte erstellen Sie zuerst die Bestell-Datei, um mit der Bestellung fortfahren zu können!"
    exit 0
    fi
fi

if [ ! -f $H/$DN  ];then
    if [ "$Z0" -gt 0 ];then
    zenity --info --text "Es ist existiert keine neue Bestell-Datei zur Fertigstellung, \
aber es sind noch fertige Bestellungen zum Versenden vorhanden!"
    kate "$H2"/*
    fi
fi

Wahrscheinlich gibt es auch hier mehrere Möglichkeiten, aber Hauptsache es funktioniert jetzt, wie es soll.

Antworten |