wiki:skripte:geburtstagserinnerung

barcode

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

  • 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

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

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

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

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

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
Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
   _  __   _  __   ___    ____  ____
  | |/_/  | |/_/  / _ \  /  _/ /_  /
 _>  <   _>  <   / // / _/ /    / /_
/_/|_|  /_/|_|  /____/ /___/   /___/
 
  • wiki/skripte/geburtstagserinnerung.txt
  • Zuletzt geändert: 2012/10/08 14:31
  • (Externe Bearbeitung)