Vorgeschichte
Wie oft kommt es vor, dass ein Freund/Verwandter/Bekannter Geburtstag hat und du es vergessen hast?
Aus diesem Grund habe ich mir ein Skript gebastelt, dass mich an Geburtstage erinnert, oder direkt dem Geburtstagskind eine SMS in meinem Namen zukommen lässt
Voraussetzung
- Handy, das über gammu konfiguriert wurde. Anleitung hier
- Email-Adresse von googlemail.com (andere funktionieren leider noch nicht)
- Mittlerweilen funktionieren auch andere Email-Adressen. Es ist aber darauf zu achten, dass man einen MX-Record eingetragen hat
Programmteile
Um das Programm zum laufen zu bekommen müssen folgende Dateien in /usr/local/bin erstellet werden
- email
- birthday.lst
- birthday
cd /usr/local/bin sudo touch email birthday.lst birthday
Das eigentliche Programm (birthday) muss ausführbar gemacht werden
sudo chmod ugo+x birthday
Datei email
Diese Datei enthält die email-Adressen, an die die Erinnerung geschickt werden soll.
Auch eine Email an mehrere Empfänger ist möglich. Die Empfänger müssen dann per Semikolon getrennt sein
Lösung: noch keine, bin noch am suchen
Update: Wenn man den MX-Record setzt, scheint es zu funtionieren
Datei birthday.lst
In dieser Datei sind die Geburtstage, sowie die Namen und Handynummern hinterlegt.
Der Aufbau ist ziemlich simpel
<Geburtsdatum>;<Name für email>;<Name für SMS>;<Zustellungsart>;<Handynummer>
- Geburtsdatum: Hier steht das Geburtsdatum. Bitte mit korektem Jahr eingeben, da damit das Alter berechnet wird
- Name für email: Hier steht der Name, der für die Benachrichtigung per Email benutzt wird. Leerzeichen sind erlaubt
- Name für SMS: Hier sollte der Name für die Persönliche Ansprache in der SMS stehen
- Zustellungsart:
- sms: Benachrichtigung per SMS
- email: Benachrichtigung per eMail
- email/sms: Benachrichtigung per eMail und SMS
- Handynummer: Handynummer, an die die Geburtstags-SMS verschickt wird
Datei birthday
Dies ist das eigentliche Skript, dass die Auswertung und benachrichtigung übernimmt
Das Programm kann kopiert und eingefügt werden
- birthday
#!/bin/bash datefile=/usr/local/bin/birthday.lst emailfile=/usr/local/bin/email.lst day=`date +%d` month=`date +%m` year=`date +%Y` #Funktion, um eine SMS mit dem Namen und dem Alter an die uebergeben Nummer zu schicken #Aufruf: f_send_sms <Name> <Alter> <Handynummer> function f_send_sms(){ name=$1 alter=$2 nummer=$3 echo "Hallo $name. Ich wuensche dir zu deinem $alter. Geburtstag alles Gute. Patrick" | /usr/bin/gammu sendsms TEXT $nummer > /dev/null 2>&1 } #Funktion, um eine email-Erinnerung an eine Adresse zu schicken #Aufruf: f_send_email <Name> <Alter> <Handynummer> <eMail-Adresse> function f_send_email(){ name=$1 alter=$2 nummer=$3 email=$4 # echo "IFS=$IFS" IFS=$' ;\n\t' mailadressen=(`grep -v "^#" $emailfile`) # echo "Anzahl der Mailadressen ${#mailadressen[*]}" for (( index_1=0 ; $index_1<${#mailadressen[*]} ; index_1++ )) do # echo "Anzahl der Mailadressen ${#mailadressen[*]}" echo -e "\nHallo\n\nIch wollte dich an den Geburtstag von $name erinnern.\n$name wird heute $alter Jahre alt.\nSchick Ihm halt mal eine SMS unter $nummer\n\nGruss Zeus" | /usr/bin/mail -s "Geburtstagserinnerung" ${mailadressen[$index_1]} done } #Auslesen der Zeilen IFS=$'\n' b_array=(`grep -v "^#" $datefile`) #Auslesen der Spalten jeder Zeile # ---- For-Schleife (von 1 bis ende Array) for (( index=0; $index < ${#b_array[*]}; index++ )) do # echo "index: $index" # echo "anzahl: ${#b_array[*]}" #Auslesen der Spalten jeder Zeile IFS=$';' birthday=(${b_array[$index]}) #echo "Eintrag Birthday 0: ${birthday[0]}" #echo "Eintrag Birthday 1: ${birthday[1]}" gebday=`echo ${birthday[0]} | cut -d'.' -f 1` gebmonth=`echo ${birthday[0]} | cut -d'.' -f 2` gebyear=`echo ${birthday[0]} | cut -d'.' -f 3` # echo -e "$gebday\n$gebmonth\n$gebyear" #Ueberpruefung des Tages und des Monats. Wenn beides zutreffend ist, wird eine SMS an den Empfaenger geschickt if [ $gebday = $day ] then if [ $gebmonth = $month ] then (( alter = $year - $gebyear )) smsemail=`echo ${birthday[3]} | tr -s '[:lower:]' '[:upper:]'` # echo $smsemail for_date=${birthday[0]} for_name_komplett=${birthday[1]} for_name=${birthday[2]} for_nr=${birthday[4]} case $smsemail in 'SMS') f_send_sms $for_name $alter $for_nr ;; 'EMAIL') f_send_email "$for_name_komplett" $alter $for_nr $emailziel ;; 'SMS/EMAIL'|'EMAIL/SMS') f_send_email "$for_name_komplett" $alter $for_nr $emailziel f_send_sms $for_name $alter $for_nr ;; *) esac fi fi done # ---- Ende For-Schleife
Regelmäßiger Start
zu guter letzt muss das Skript noch regelmäßig gestartet werden. Ich habe mich dafür entschieden, das Skript um 7Uhr ausführen zu lassen.
sudo vim /etc/crontab
folgenden eintrag anhängen
00 7 * * * root /usr/local/bin/birthday
Diskussion