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

Das Problem an der Sache ist, dass bis jetzt nur emails an googlemail auch wirklich ankommen. GMX.de und WEB.de akzeptieren keine Emails von Privaten Mailservern. 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

#!/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