change
[mail2smsgw.git] / convert2sms.sh
CommitLineData
e540fe8a
LM
1#!/bin/bash
2
3# constants
4MYDIR=$(dirname $0)
5PROGNAME=$(basename $0)
6
7# configuration variables
8CONFIG=$MYDIR/convert2sms.rc
9DOMAINS=$(hostname -d | awk '{ print "@" $0 }')
10[ -f "$CONFIG" ] && source $CONFIG
11[ -z "$GATEWAY" -o -z "$PASSWORD" ] \
12 && { echo "No valid configuration"; exit 1; }
13
14# default variables
15DRYRUN=
16PHONE=
17TEMPFILE=$HOME/tmp/smsto.$$
18
19# urlencode function
20function urlencode () {
21 string=$*
22
23 #[ "$DRYRUN" ] && { echo $string; return; }
24
25 for ((i = 0 ; i < ${#string} ; i++ )); do
26 c=${string:$i:1}
27 case "$c" in
28 [-_.~a-zA-Z0-9]) echo -n $c;;
29 *) printf '%%%02x' "'$c"
30 esac
31 done
32}
33
34# log function
35function log () {
36 [ "$DRYRUN" ] && echo -e "\033[1;34m$*\033[0;0m" \
37 || logger -i -t SMSTO "$*"
38}
39
40# usage function
41function usage () {
42 echo "usage: $PROGNAME [-h] [-p ..........]"
43 echo " -d: dryrun"
44 echo " -h: help message"
45 echo " -p: phone number"
46 exit $1
47}
48
49# get phone number from argument
50while [ $# -ne 0 ]; do
51 case "$1" in
52 -d) DRYRUN=1;;
53 -h) usage 0;;
54 -p) shift; PHONE=$1;;
55 *) usage 1;;
56 esac
57 shift
58done
59[ "$PHONE" ] || usage 1
60
61# clean up when done
62trap "/bin/rm -f $TEMPFILE" 0 1 2 3 15
63
64# get mail from standard input
65while read -t 1 line; do
66 echo "$line" >> $TEMPFILE
67done
68[ -f "$TEMPFILE" ] || { echo "No input email"; exit 1; }
69
70# analyse message to get sender and subject
71FROM=$(awk '$1 == "From:" { sub(/[^ ]*: */, ""); print }' $TEMPFILE)
72SUBJECT=$(awk '$1 == "Subject:" { sub(/[^ ]*: */, ""); print }' $TEMPFILE)
73MESSAGE=$(awk '/^$/,0 { if (/^--/) exit; if (!/^$/) print }' $TEMPFILE)
74
75# check sender domain
76ERR=1
77[ "$DOMAINS" ] || ERR=0
78for d in $DOMAINS; do
79 [ "$FROM" ] || break;
80 [[ $FROM =~ $d ]] && { ERR=0; break; }
81done
82[ $ERR -ne 0 ] && { log "Reject from '$FROM'"; exit 1; }
83
84# check the right pattern of the number
85[[ "$PHONE" =~ ^0[0-9]*$ ]] \
86 || { log "Incorrect phone number '$PHONE' from '$FROM'"; exit 1; }
87[[ "$PHONE" =~ ^00 ]] \
88 && { log "International phone number '$PHONE' from '$FROM'"; exit 1; }
89[ ${#PHONE} -eq 10 ] \
90 || { log "Non standard phone number '$PHONE' from '$FROM'"; exit 1; }
91
92# log message
93log "Accept from '$FROM' to $PHONE"
94
95# build message
96EMAIL=${FROM/#*<}; EMAIL=${EMAIL/%>*}
97FROM=${FROM/%<*}; FROM=${FROM/% }
98[ "$FROM" ] || FROM=EMAIL
99[ "$SUBJECT" ] && SUBJECT=" "$SUBJECT":"
100[ "$MESSAGE" ] && MESSAGE=$'\n'$MESSAGE
101
102MESSAGE=$(urlencode "[$FROM]$SUBJECT$MESSAGE")
103
104# send http command
105[ "$DRYRUN" ] && echo "SMS: $MESSAGE" \
106 || wget --quiet --output-document=/dev/null \
107 "http://$GATEWAY:9090/sendsms?phone=$PHONE&text=$MESSAGE&password=$PASSWORD"
108
109exit $?