Nobuddy
Anmeldungsdatum: 2. September 2005
Beiträge: 6990
Wohnort: 29614 Soltau
|
Hallo zusammen, ich suche eine einfache Lösung, für das Versenden von Mails mit Anhang. Über ein Script, erstelle ich eine Bestell-Datei, die mein Lieferant erhalten soll. Diese Bestelldatei möchte ich als Anhang per Script, an meinen Lieferanten regelmäßig senden. - Achtung! - Nur Mail-Versand, kein Empfang
- Die EMail-Adresse, an die gesendet wird, ist immer die Gleiche Normalerweise verwende ich kmail, aber in diesem speziellen Fall, dachte ich mir daß das Einfachste ein Script dafür wäre. Was mir jetzt noch fehlt, ist eben der Mailversand per Script. Gibt es da eine einfache Lösung? Grüße Nobuddy
|
DrScott
Ehemalige
Anmeldungsdatum: 7. Juli 2005
Beiträge: 6018
Wohnort: Nürnberg
|
|
Nobuddy
(Themenstarter)
Anmeldungsdatum: 2. September 2005
Beiträge: 6990
Wohnort: 29614 Soltau
|
Hallo DrScott, das ging aber flott 👍 Mit dem Englisch tue ich mich leider schwer, wäre dies so richtig? #!/bin/bash
#
mail username < /ORT/DATEI.123
echo "Bestellung" | mail lieferant@lieferant.de
|
Nobuddy
(Themenstarter)
Anmeldungsdatum: 2. September 2005
Beiträge: 6990
Wohnort: 29614 Soltau
|
Hm, ... oder dies? uuencode /ORT/DATEI.123 | mail lieferant@lieferant.de
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Hallo Nobuddy wenn ich die Beispiele richtig verstehe, dann sollte es wohl so funktionieren
uuencode DATEI.123 DATEI.123 | mail lieferant@lieferant.de Gruß...busfahrer
|
DrScott
Ehemalige
Anmeldungsdatum: 7. Juli 2005
Beiträge: 6018
Wohnort: Nürnberg
|
Richtig gut wird es erst mit "metasend" oder noch besser "sendfile".
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17621
Wohnort: Berlin
|
Setzen die Lösungen nicht alle einen Mailserver vorraus?
|
toddy
Ikhayateam
Anmeldungsdatum: 31. Juli 2007
Beiträge: 9522
Wohnort: Lüneburg
|
user unknown schrieb: Setzen die Lösungen nicht alle einen Mailserver vorraus?
Hallo, ja würde ich so sehen, denn ansonsten kann man den Befehl mail ja nicht richtig absetzen. Liebe Grüße, Torsten
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2510
|
Für den Fall, dass du keinen lokalen Mailserver eingerichtet hast und das auch nicht tun willst: Wenn du sagst, dass du sonst KMail dafür benutzt, dann hast du wohl einen Smarthost? Sprich, du wirfst die Mails zum Beispiel dem Mailserver deines Providers zu und der kümmert sich dann um deren korrekten Versand? Dann wäre vielleicht mutt eine Idee. Das ist eigentlich ein vollwertiger MUA für die Konsole, der aber in Skripten verwendbar ist. Du müsstest dir eine minimale ~/.muttrc als Konfigurationsdatei anlegen, zum Beispiel sowas:
set from="deine.adresse@example.org"
set copy=no
set smtp_url="smtp://benutzername:passwort@mailserver.deines.providers.example.org" Dann kannst du Mails samt Attachment so verschicken:
$ echo "Kurzer Text, Daten von $(date)" | mutt -s "Irgendein Betreff" -a foodatei bardatei nocheinedatei -- lieferant@example.org
|
Nobuddy
(Themenstarter)
Anmeldungsdatum: 2. September 2005
Beiträge: 6990
Wohnort: 29614 Soltau
|
Hallo und erstmal Danke an Alle, für Euren INPUT! Wie ich sehe, gibt es da unterschiedliche Möglichkeiten. Ich habe den Vorschlag von Vain getestet und muß sagen, daß dies ganz einfach umzusetzen ist und vor allem funktioniert es. ☺ Mußte nur meine entsprechende Daten eintragen, Danke Vain! Jetzt habe ich noch eine Frage. Ich habe 2 Ordner erstellt ($HOME/ExportMails und $HOME/SendMails). Im Ordner $HOME/ExportMails kommen die Dateien rein, die als Anhang in der Mail verschickt werden sollen. Den Ordner $HOME/SendMails habe ich dafür gedacht, daß nach erfolgreicher Versendung der Mail, diese dann in $HOME/SendMails gespeichert wird und in $HOME/ExportMails gelöscht wird. Meine .muttrc sieht im Moment so aus: set folder="$HOME/ExportMails" # definiert das Arbeitsverzeichnis von mutt
set record="$HOME/SendMails" # bewirkt, dass verschickte Mails in der Datei
# 'sent' gespeichert werden
set editor="nano" # definiert den Editor, der zum Schreiben von
# Mails benutzt wird
my_hdr From: shop@officeplanet.de # definiert den Kopf der Mails
my_hdr Reply-To: shop@officeplanet.de
set delete=no # zum Testen werden Nachrichten erst
# einmal nicht gelöscht
set pager_index_lines=8 # Teilt den Bildschirm in die Anzeige der Mail
# und den Pager, hier 8 Zeilen groß
set from="shop@officeplanet.de"
set copy=no
set smtp_url="smtp://Benutzernamen:Passwort@Mailserver.de" Was muß ich da in der .muttrc ändern und welche Einträge sind vielleicht überflüssig? Grüße Nobuddy
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2510
|
Hmm, wolltest du das nicht per Skript machen? ☺ Ich dachte, du hättest etwas in dieser Richtung vor:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | #!/bin/bash
# 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 ~/ExportMails/*
do
mutt -s "Datei $i" -a "$i" -- lieferant@example.org <<EOF
Hallo, Welt!
Das hier ist Datei $i. Bitte schön. :-)
EOF
if (( $? == 0 ))
then
mv -v "$i" ~/SentMails/
else
echo "Fehler beim Senden der Mail für Datei $i." >&2
exit 1
fi
done
|
Dafür müsstest du an der .muttrc gar nichts ändern. Mutt wird lediglich als Versandprogramm benutzt, den Rest machst du selbst. Ich bin mir aber auch nicht sicher, ob ich dich richtig verstanden habe. Denn: Nobuddy schrieb: Den Ordner $HOME/SendMails habe ich dafür gedacht, daß nach erfolgreicher Versendung der Mail, diese dann in $HOME/SendMails gespeichert wird und in $HOME/ExportMails gelöscht wird.
Was willst du speichern – die verschickte Mail oder den zu verschickenden Anhang? In ~/ExportMails sind ja noch keine fertigen Mails. Das Skript oben verschiebt natürlich nur die Anhänge. Würdest du die von mutt erzeugten und verschickten Mails sichern wollen, dann würde ich ~/SentMails als Maildir betreiben. Das hat gegenüber der Default-Einstellung von mutt (mbox-Format) unter anderem den Vorteil, dass jede Mail eine eigene Datei wird. Dazu müsstest du in meiner .muttrc oben das set copy=no rausnehmen und dafür reinsetzen:
set mbox_type=Maildir
set record="~/SentMails" Damit mutt das richtig erkennt, müsstest du lediglich noch die drei Unterverzeichnisse hier erstellen:
| $ mkdir -p ~/SentMails/{cur,new,tmp}
|
Jede verschickte Mail wird dann im Verzeichnis ~/SentMails/cur abgelegt. Oder hast du etwas ganz anderes vor? Dass du den Editor für mutt gesetzt hast, lässt mich daran zweifeln, dass ich auf dem richtigen Dampfer bin. 😈
|
Nobuddy
(Themenstarter)
Anmeldungsdatum: 2. September 2005
Beiträge: 6990
Wohnort: 29614 Soltau
|
Hallo Vain, Danke für Deine Hilfe, Dein Vorschlag funktioniert prima. 😉 Ich poste hier mal mein ganzes Script: #!/bin/bash
#
# Aktuelles Datum im Format "JahrMonatTag", Beispiel: 12.08.2010 = 20100812
D=`date +"%Y%m%d"`
# Arbeitsordner
H=$HOME/Ordner1
H1=$HOME/ExportDateien
H2=$HOME/ExportMails
H3=$HOME/SendMails
# Arbeitsordner/Dateinamen
T=$H/$D.txt
# Wert
W=1
# Wert in Datei $T zählen.
y=0
for x in `cat $T`;
do y=$((y+$x));
done;
echo $y
# Zähler
ZZ=$((y+1))
# Überprüfung, Datei die nicht dem Datumsformat entspricht wird gelöscht und Datei mit aktuellem Datum wird erstellt, wenn diese nicht vorhanden ist.
if [ $H/*.txt != $H/$D.txt ];then
rm $H/*.txt
touch $H/$D.txt
fi
# In Datei $T werden die Zeilen mit "1" gezählt.
if [ $y = 0 ];then
mv $H/OSBofficeplanet.ASC $H/$D"01".ASC
fi
if [ $ZZ -gt 0 -a $ZZ -lt 10 ];then
mv $H/OSBofficeplanet.ASC $H/$D"0"$ZZ.ASC
fi
if [ $ZZ -gt 9 ];then
mv $H/OSBofficeplanet.ASC $H/$D$ZZ.ASC
fi
# "1" wird in die Datei $T angehängt.
if [ $H/*.txt = $H/$D.txt ];then
echo "1" | tee -a $T
fi
# Kopie nach ExportMails
cp $H/$D*.ASC $H2
# Sicherung der ExportDatei
mv $H/$D*.ASC $H1
# Auswahl Datei oder Ordner
function menu {
choice=$(zenity --list --width=250 --height=200 --text "Wählen Sie Ihre Option!" --column "" --column "Nr" --column "Beschreibung" --hide-column 2 --radiolist --separator=" " --title "Untermenu" \
false 1 "Bestellung abschicken" \
false 2 "Beenden" )
}
menu
# EMail-Versand
if [ $choice = 1 ];then
SUBJECT="Bestellung"
#EMAIL="Lieferant@Lieferant.de"
EMAIL="Meine@Mailadresse.de" # ZumTesten, an eigene Mail-Adresse.
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/*
do
echo "$SUBJECT, $(date)" | mutt -s $SUBJECT -a $EMAILANHANG -- $EMAIL
if (( $? == 0 ));then
mv -v "$i" $H3/
else
echo "Fehler beim Senden der Mail für Datei $i." >&2
exit 1
fi
done
fi
if [ $choice = 2 ];then
echo "Programm beendet." >&2
exit 1
fi Bitte nicht wundern, bin kein Profi, wahrscheinlich lässt sich manches besser bzw. einfacher gestalten. Meine ~/.muttrc sieht so aus: set mbox_type=Maildir
set folder="$HOME/ExportMails" # definiert das Arbeitsverzeichnis von mutt
set record="$HOME/SendMails" # bewirkt, dass verschickte Mails in der Datei
# 'sent' gespeichert werden
set editor="nano" # definiert den Editor, der zum Schreiben von
# Mails benutzt wird
my_hdr From: shop@officeplanet.de # definiert den Kopf der Mails
my_hdr Reply-To: shop@officeplanet.de
set delete=no # zum Testen werden Nachrichten erst
# einmal nicht gelöscht
set pager_index_lines=8 # Teilt den Bildschirm in die Anzeige der Mail
# und den Pager, hier 8 Zeilen groß
set from="shop@officeplanet.de"
# set copy=no
set smtp_url="smtp://Benutzernamen:Passwort@Mailserver.de" So, wie Du geschrieben hast, wird die verschickte mail in ~/SendMails/cur gespeichert und das ist genauso, wie ich es mir vorgestellt hatte, Super! 👍 Wenn ich jetzt mehrere Lieferanten nach diesem Schema, meine Bestellungen per Mail zukommen lassen wollte, würde ich wohl einen Mailserver benötigen, dann würde es so nicht mehr funktionieren. Das wäre dann wohl schon ein größerer Aufwand. Grüße Nobuddy
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17621
Wohnort: Berlin
|
if [ $choice = 2 ];then
echo "Programm beendet." >&2
exit 1
fi
Wenn der User beschliesst das Programm zu beenden wertest Du das als Fehler? Man traut es sich kaum noch zu sagen, aber Backticks are deprecated.
for x in `cat $T`;
|
Nobuddy
(Themenstarter)
Anmeldungsdatum: 2. September 2005
Beiträge: 6990
Wohnort: 29614 Soltau
|
Hallo user unknown, meine Script-Programmierkenntnisse sind sehr begrenzt, daher freue ich mich immer, wenn ich auf grafierende Fehler hingewiesen werde, Danke. 😉 So, sollte dies besser aussehen: if [ $choice = 2 ];then
echo "Programm beendet."
exit 0
fi , oder ist dies immer noch nicht ganz sauber? Sollte ich hier: for x in `cat $T`; , statt Backsticks Anführunszeichen verwenden, oder ganz weglassen? Grüße Nobuddy
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17621
Wohnort: Berlin
|
Nobuddy schrieb: So, sollte dies besser aussehen: if [ $choice = 2 ];then
echo "Programm beendet."
exit 0
fi , oder ist dies immer noch nicht ganz sauber?
Das ist besser, außer Du hättest einen ernsthaften Grund an dieser Stelle einen Fehler zu signalisieren, den ein anderes Programm detektieren kann, um darauf passend zu reagieren, also wenn ein anderes Programm davon abhängig wäre, dass das Skript durchgelaufen ist, und niemand "Beenden" gedrückt hat. Allerdings ist das Programm hier sowieso zuende, es kommt nichts mehr, und es endet auch so mit exit 0, ohne dass man es hinschreibt. Das ist, wie wenn in einem Buch auf der letzten Seite "Ende" steht. Das Buch ist eh aus. Man sieht auch so, das nichts mehr kommt.
Sollte ich hier: for x in `cat $T`; , statt Backsticks Anführunszeichen verwenden, oder ganz weglassen?
for x in $(cat $T);
# und zuvor
D=`date +"%Y%m%d"`
ist empfehlenswert. Backticks werden je nach Schriftart schlecht erkannt, oder mit Apostrophs gerne verwechselt, und die $(... $(...$(...)))-Schreibweise läßt sich problemlos schachteln. Außerdem ist sie portabler über unterschiedliche Shells und sollte daher gerade in einem Anfängerforum propagiert werden.
|