So, ich bin fast etwas stolz auf mich, da es das erste bash script das ich jemals in meinem Leben erstellt habe.

stand mir tatkräftig zur Seite:
Code: Alles auswählen
#!/bin/bash
#Script um per mailx eine Nachricht an alle Benutzer die in der VimbAdmin-Datenbank gespeichert sind zu senden.
#Script by Michael Skalda
#skawa.de
#Aufruf des scripts:
#Moeglichkeit 1: ohne parameter: Abfrage von Betreff und Nachricht
#Moeglichkeit 2: Mitgabe von Parametern: ./rundmail.sh betreff nachricht
#Prüfung, ob Parameter leer sind
if [ -z "$1" ] && [ -z "$2" ]
then
#Wenn Parameter leer sind, werden betreff und nachricht per read -p abgefragt
echo 'Rundmail an alle Benutzer der VimbAdmin-Datenbank!'
read -p "Betreff: " betreff
echo 'HTML ist aktiviert! Beispiele: Zeilenumbruch mit <br>, Absatz mit <p>'
read -p "Nachricht: " nachricht
#Wenn mindestens einer der beiden Parameter nicht leer ist, wird geprüft, ob Parameter 2 (nachricht) leer ist
elif [ -z "$2" ]
then
#Wenn parameter 2 leer ist, wird betreff ausgegeben und Nachricht per read -p abgefragt
betreff="$1"
echo 'Betreff: ' $betreff
echo 'HTML ist aktiviert! Beispiele: Zeilenumbruch mit <br>, Absatz mit <p>'
read -p "Nachricht: " nachricht
else
#Sind beide Parameter gegeben, wird die Nachricht verwendet und betreff und nachricht ausgegeben.
betreff="$1"
nachricht="$2"
echo 'Betreff: ' $betreff
echo 'Nachricht: ' $nachricht
echo 'Sende E-Mail...'
fi
#MySQL-User mit Zugriff auf die VimbAdmin-Datenbank
sql_user="vimbadmin"
#Passwort des MySQL-Users
sql_psw="changeme"
#Datenbank von Vimbadmin
sql_database="vimbadmin"
#Absender festlegen:
postmaster="postmaster@skawa.de"
#Abruf der Einträge in der Spalte "username" in der zuvor angegebenen Datenbank (Der Spaltenname wurde natürlich übersprungen.)
while read line
do
emails+=("$line")
done < <(mysql --skip-column-names -u${sql_user} -p${sql_psw} ${sql_database} -e "SELECT username FROM mailbox")
#Senden der E-Mails anhand der soeben gewonennen Datenbank
echo "$nachricht" | mailx -a 'Content-Type: text/html' -a "From: $postmaster" -s "$betreff" ${emails[@]}
echo 'Mail wurde erfolgreich an folgende Empfänger versendet:'
for i in ${emails[@]}; do
echo $i
done
Das ganze als z. B. rundmail.sh in /usr/bin/ abspeichern um es systemweit ausführbar zu machen.
chmod +x nicht vergessen.
E-Mailversender ist anscheinend standardmäßig der ssh-user@hostname -f
Habe das script angepasst. Den Absender kann man nun in der Variable $postmaster festlegen und wird per -a an mailx weitergegeben.
Aufgerufen wird es entweder ohne Parameter, mit anschließender Abfrage von betreff und nachricht per read -p.
Wird nur ein Parameter angegeben, wird dieser als betreff behandelt und die nachricht per read-p abgefragt.
Bei Angabe beider Parameter wird die E-Mail sofort versendert.
Beispiel für die Ausführung mit beiden Parametern
./rundmail.sh "Das ist der Betreff" "Hallo,<p>das ist die Nachricht."
In allen Fällen wird nach dem versenden eine Liste der Empfänger ausgegeben.
Die SQL-Query muss natürlich je nachdem wo die mail-accounts gespeichert sind, angepasst werden.
Werde wohl versuchen, das ganze in PHP zu realisieren und direkt in VimbAdmin zu implementieren, da hier auch die Formatierung der Mail einfacher möglich ist.
Sollte euch was am Script stören, immer her mit konstruktiver Hilfe

)