From: Laurent Mazet Date: Wed, 13 Mar 2019 22:38:32 +0000 (+0100) Subject: add new files X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=e540fe8a6629af1adc909e12cb6887c6493d6a83;p=mail2smsgw.git add new files --- e540fe8a6629af1adc909e12cb6887c6493d6a83 diff --git a/convert2sms.rc b/convert2sms.rc new file mode 100644 index 0000000..472ef34 --- /dev/null +++ b/convert2sms.rc @@ -0,0 +1,6 @@ + # -*- shell-script -*- + + # configuration variables + GATEWAY=smsbox + PASSWORD=my_password + DOMAINS='@softndesign.org @oelm.org' diff --git a/convert2sms.sh b/convert2sms.sh new file mode 100755 index 0000000..f110459 --- /dev/null +++ b/convert2sms.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +# constants +MYDIR=$(dirname $0) +PROGNAME=$(basename $0) + +# configuration variables +CONFIG=$MYDIR/convert2sms.rc +DOMAINS=$(hostname -d | awk '{ print "@" $0 }') +[ -f "$CONFIG" ] && source $CONFIG +[ -z "$GATEWAY" -o -z "$PASSWORD" ] \ + && { echo "No valid configuration"; exit 1; } + +# default variables +DRYRUN= +PHONE= +TEMPFILE=$HOME/tmp/smsto.$$ + +# urlencode function +function urlencode () { + string=$* + + #[ "$DRYRUN" ] && { echo $string; return; } + + for ((i = 0 ; i < ${#string} ; i++ )); do + c=${string:$i:1} + case "$c" in + [-_.~a-zA-Z0-9]) echo -n $c;; + *) printf '%%%02x' "'$c" + esac + done +} + +# log function +function log () { + [ "$DRYRUN" ] && echo -e "\033[1;34m$*\033[0;0m" \ + || logger -i -t SMSTO "$*" +} + +# usage function +function usage () { + echo "usage: $PROGNAME [-h] [-p ..........]" + echo " -d: dryrun" + echo " -h: help message" + echo " -p: phone number" + exit $1 +} + +# get phone number from argument +while [ $# -ne 0 ]; do + case "$1" in + -d) DRYRUN=1;; + -h) usage 0;; + -p) shift; PHONE=$1;; + *) usage 1;; + esac + shift +done +[ "$PHONE" ] || usage 1 + +# clean up when done +trap "/bin/rm -f $TEMPFILE" 0 1 2 3 15 + +# get mail from standard input +while read -t 1 line; do + echo "$line" >> $TEMPFILE +done +[ -f "$TEMPFILE" ] || { echo "No input email"; exit 1; } + +# analyse message to get sender and subject +FROM=$(awk '$1 == "From:" { sub(/[^ ]*: */, ""); print }' $TEMPFILE) +SUBJECT=$(awk '$1 == "Subject:" { sub(/[^ ]*: */, ""); print }' $TEMPFILE) +MESSAGE=$(awk '/^$/,0 { if (/^--/) exit; if (!/^$/) print }' $TEMPFILE) + +# check sender domain +ERR=1 +[ "$DOMAINS" ] || ERR=0 +for d in $DOMAINS; do + [ "$FROM" ] || break; + [[ $FROM =~ $d ]] && { ERR=0; break; } +done +[ $ERR -ne 0 ] && { log "Reject from '$FROM'"; exit 1; } + +# check the right pattern of the number +[[ "$PHONE" =~ ^0[0-9]*$ ]] \ + || { log "Incorrect phone number '$PHONE' from '$FROM'"; exit 1; } +[[ "$PHONE" =~ ^00 ]] \ + && { log "International phone number '$PHONE' from '$FROM'"; exit 1; } +[ ${#PHONE} -eq 10 ] \ + || { log "Non standard phone number '$PHONE' from '$FROM'"; exit 1; } + +# log message +log "Accept from '$FROM' to $PHONE" + +# build message +EMAIL=${FROM/#*<}; EMAIL=${EMAIL/%>*} +FROM=${FROM/%<*}; FROM=${FROM/% } +[ "$FROM" ] || FROM=EMAIL +[ "$SUBJECT" ] && SUBJECT=" "$SUBJECT":" +[ "$MESSAGE" ] && MESSAGE=$'\n'$MESSAGE + +MESSAGE=$(urlencode "[$FROM]$SUBJECT$MESSAGE") + +# send http command +[ "$DRYRUN" ] && echo "SMS: $MESSAGE" \ + || wget --quiet --output-document=/dev/null \ + "http://$GATEWAY:9090/sendsms?phone=$PHONE&text=$MESSAGE&password=$PASSWORD" + +exit $? diff --git a/procmailrc b/procmailrc new file mode 100644 index 0000000..08f51c5 --- /dev/null +++ b/procmailrc @@ -0,0 +1,15 @@ +PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin +LOGFILE=$HOME/log.`date +%y-%m-%d` +LOCKFILE=$HOME/.lockmail +VERBOSE=yes + +SMSDEST=$1 + +:0 +{ + :0 c + | $HOME/bin/convert2sms.sh -p $SMSDEST + + :0 + Maildir/transmitted/ +}