barcode

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

Programmteile

Um das Programm zum laufen zu bekommen müssen folgende Dateien in /usr/local/bin erstellet werden

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>

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