這是一次很特殊的需求,公司採購了Hibox傳真型信箱,中華電信官網說有提供郵件收發傳真和簡訊通知的功能,但使用後卻發現簡訊功能沒有作用,簡訊功能的選項還存在,試了幾次都沒有發出簡訊,打電話去中華電信客服後,對方幫我測試也同意確實沒有成功,轉聯絡後台技術人員才知道,簡訊通知功能多年前就因銷售業績不佳已經取消了,當下我覺得有種廣告不實受騙的感覺,但礙於時間緊迫,東西也採購了,只好決定自己寫shell script處理,意外開啟了人生的第一支程式。
簡單來說,我要透過擷取郵件log關鍵字的方式來發簡訊給接收人員,公司有購買簡訊的功能付物,這時候就很方便取得簡訊api,首先要將Hibox收到的郵件轉寄到公司某新建立的信箱,該帳號需先確保只有收傳真通知的唯一用途,而不能收其他郵件,因為這樣會影響到郵件log的判斷,再來就是透過判斷式和迴圈,將log逐一撈出並篩選,達到最後條件後就發出簡訊,以下是我的shell script。
#!/bin/bash
TODAY=$(date +"%b %d")
CTIME=$(tail -1 /var/log/mail.log | cut -c 1-6)
NTIME=$(echo $CTIME)
RTIME="3 mins ago"
OTIME="6 mins ago"
LFILE=$(date --date="$RTIME" +"%Y%m%d%H%M").txt
OFILE=$(date --date="$OTIME" +"%Y%m%d%H%M").txt
NFILE=$(date +"%Y%m%d%H%M").txt
LOG=$(grep "to=<hibox-notification@interpay.com.tw>" /var/log/mail.log | cut -c 50-100)
LINE=$(grep "to=<hibox-notification@interpay.com.tw" /var/log/mail.log | wc -l)
RECIPIENTS="username@maildomain"
SUB="傳真通知"
CON="收到一封傳真,請至信箱確認。"
NUMBERS="1234567890"
echo $LINE > ~/sh/LOG/$NFILE
if [ ! -z "$LOG" ]
then
if [ "$TODAY" = "$NTIME" ]
then
if [ $(cat ~/sh/LOG/$NFILE) -gt $(cat ~/sh/LOG/$LFILE) ]
then
for i in $NUMBERS
do
curl -k -O https://smsapi.mitake.com.tw/api/mtk/SmSend\?username\=12345678\&password\=password\&encoding\=UTF8\&dstaddr\=$i\&smbody\=$CON > /dev/null
sleep 5
done
echo $CON | mail -s $SUB $RECIPIENTS
echo $LINE > ~/sh/LOG/$LFILE
rm -rf ~/sh/LOG/$OFILE
else
echo "There is no new logfile."
rm -rf ~/sh/LOG/$OFILE
fi
else
rm -rf ~/sh/LOG/$OFILE
fi
else
echo "There is no FAX."
rm -rf ~/sh/LOG/$OFILE
fi
沒有留言:
張貼留言