Interner Newsletter - Massenmail

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
skawade
Beiträge: 2
Registriert: 30.08.2016 19:02:27

Interner Newsletter - Massenmail

Beitrag von skawade » 30.08.2016 19:14:30

Hallo Leute,

ich bin neu hier und hätte auch gleich eine Frage an euch, da ich :google: etwas eine halbe stunde belästigt habe und absolut nichts dazu finde...

Auf meinem Debian 8 vServer läuft ein Dovecot-Postfix-Apache2-Roundcube-Vimbadmin-Mailserver und ich bin sehr sehr zufrieden damit.

Da meine Debian- bzw. Linuxkenntnisse noch sehr überschaubar sind, hat die Einrichtung ziemlich lange gedauert und auch viele nerven gekostet. Aber nun läuft der Server mit SPF-Eintrag, DKIM-Signatur, Let's Encrypt SSL Zertifikat und funktionierendem Spamfilter. Meine Mails werden nicht als Spam erkannt und kommen auch immer an.

Nun haben schon ein paar meiner Freunde eine E-Mail-Adresse bei mir. (Sie wissen, dass das ganze unstable ist und die E-Mailadresse bisher nur zum Spaß genutzt werden sollte, da ich eben noch ein Linuxnoob bin.)

Jetzt würde ich gerne wissen, wie ich an alle E-Mail-Konten eine serverweite Massen-Nachricht sende, beispielsweise um die Benutzer über ein neues Serverfeature zu informieren.

Die Mailkonten werden in der Vimbadmin Datenbank gespeichert, die Mails liegen unter /var/vmail/.

Wahrscheinlich ist die Lösung einfacher als ich denke... ich hoffe ihr könnt mir helfen :)

Danke! :P

skawade
Beiträge: 2
Registriert: 30.08.2016 19:02:27

Re: Interner Newsletter - Massenmail

Beitrag von skawade » 31.08.2016 00:40:12

So, ich bin fast etwas stolz auf mich, da es das erste bash script das ich jemals in meinem Leben erstellt habe. :google: 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 :))

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Interner Newsletter - Massenmail

Beitrag von ThorstenS » 01.09.2016 10:51:34

learning by doing ist immer zielführend :THX:

Ich würde allerdings die /etc/aliases benutzen.

Code: Alles auswählen

intern: user@dom1, user2@dom1, userN@domN 
Die Mail an alle verschickst du dann einfach über deinen Webmailer an intern@dom1Das erleichtert dir das Schreiben von umfangreichen Mails dann doch ganz erheblich.

Die Zeile in der aliases erzeugst du dann periodisch über ein Script per cronjob.

Antworten