====== 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: * Postfix * smstools ( z.B. wie [[linux:nagios:sms-versand|hier]] eingerichtet ===== 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: ''@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: * virtuelle ''aliases'' mit Regexp-Patterns \\ vi /etc/postfix/sms_aliases \\ Inhalt: \\ #/^491*/ sms@. \\ Nun die Datei dem Postfix bekannt geben. \\ vi /etc/postfix/main.cf \\ Hier die Zeile mit ''alias_maps'' wie folgt anpassen: \\ alias_maps = hash:/etc/aliases, regexp:/etc/postfix/sms_aliases \\ Zuletzt noch diesen Befehl ausführen: \\ postmap /etc/postfix/sms_aliases * ''aliases'' Datei anpassen \\ vi /etc/aliases \\ Inhalt unten einfügen: \\ sms: "|sudo /usr/local/bin/email2sms" \\ Nun noch die neuen Aliase bekanntmachen: \\ newaliases * ''sudoers'' Datei anpassen \\ visudo \\ Inhalt unten einfügen: \\ # Fuer Postfix zum senden von SMS nobody ALL=(ALL) NOPASSWD: /usr/local/bin/email2sms 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