Inhaltsverzeichnis

Sms-gateway

Man kann sich mit einem GSM-Modem oder einem Mobiltelefon und einem Linux-Server ein SMS-Gateway erstellen.
Das kann dann z.B. per Postfix Mails mit bestimmter Empfängeradresse annehmen und diese dann zu einer Tel-Nummer ver GSM-Modem als SMS senden.

Hier wird nur eine mögliche Konfiguration beschrieben, es gibt noch einige andere im WWW.

Voraussetzungen

Folgende Software muss vorhanden und eingerichtet werden:

Einrichten

Nun verlinkt man sich das Script „email2sms“

ln -s /usr/share/doc/smstools/examples/scripts/email2sms /usr/local/bin/

Der Postfix schreibt im Mail-Header die „To:“ Adresse wie folgt: <EMPFÄNGER>@DOMAIN.TLD>
Das verstehen die SMSTools nicht, daher muss das erste Zeichen „<“ und alle Zeichen einschließlich dem „@“ entfernt werden.
Man kann das in dem email2sms Script lösen in dem man folgende Zeile ändert:

destinations=`formail -zx "To:" < $tmp`

ändern in

destinations=`formail -zx "To:" < $tmp | grep -Eo "[0-9]{3,}"`

Damit nun der Postfix auch eine Mail, mit dem Empfängerformat LÄNDERCODE_TELEFONNUMMER@DOMAIN.TLD (z.B. 49123456789@test.de), an das email2sms Programm sendet, erstellt man sich eine virtuelle Aliases Datei mit Regexp-Patterns und der Anweisung die Mail an den virtuellen Benutzer „sms“ zu senden. Dieser Benutzer wird in der aliases Datei angegeben und angewiesen die Mail an das Programm email2sms zu übergeben. Da die aliases Datei nicht mit Regexp-Patterns umgehen kann muss hier die Umleitung über die virtuelle Aliases-Datei erfolgen. Weiterhin ist es wichtig den Befehl in der aliases Datei mit sudo aufzurufen, da sonst Postfix ein chown auf die SMS-Datei unter /var/spool/sms/outgoing machen kann. Auch hierfür passt man die sudoers Datei und die Berechtigungen auf das Verzeichnis /var/spool/sms/outgoing an.
Jetzt aber genug geredet; hier die Befehle:

Nun kann man einfach eine Mail an den Server senden und ein wenig später kommt diese per SMS an.
Aber Vorsicht nicht zu viele Zeichen versenden ;-)

Mail abschneiden

Nach 160 Zeichen ist bei einer SMS erstmal Schluss. Will man mehr versenden, wird automatisch eine neue SMS versendet.
Das hier angepasste email2sms Script, schneidet die Mail nach 160 Zeichen ab und versendet nur diese ersten 160 Zeichen.

tmp=$(mktemp /tmp/smsgw.XXXXXX)
cat >$tmp
BODY="formail -I "" < $tmp"
destinations=`formail -zx "To:" < $tmp | grep -Eo "[0-9]{3,}"`
IFS=,
for destination in $destinations; do
  destination=${destination## }
  OUTFILE=$(mktemp /var/spool/sms/outgoing/smsgw.out.XXXXXX)
  echo ${BODY:1:160} > $tmp
  formail -f -I "To: $destination" < $tmp > $OUTFILE
  chmod 666 $OUTFILE
  echo "SMS queued to $OUTFILE"
done
rm $tmp