あけましておめでとうございます。
毎年、適当な言語を選んで、あけましておめでとうメールを送っています。
今年は、bashにしてみました。
Environment
- CentOS release 6.8 (Final)
- GNU bash, version 4.1.2
Code
昔xenserverのhotbackupで使ってたやつをsmtp認証にしただけ...
https://github.com/dharry/xenserver-hotbackup
# !/bin/bash
export LANG=C
export LC_ALL=C
check_commands()
{
for _cmd in $@
do
which $_cmd > /dev/null 2>&1
if [ $? != 0 ]; then
echo "$_cmd command not found."; exit 1
fi
done
}
make_maildata()
{
_host=$1
_user=$2
_pass=$3
_from=$4
_to=$5
_subject=$6
_body=$7
_xmailer="Bash+NetCat Mailer"
_user=$(echo $_user | base64)
_pass=$(echo $_pass | base64)
echo "HELO ${_host}"
echo "AUTH LOGIN"
echo "${_user}"
echo "${_pass}"
echo "MAIL FROM: <${_from}>"
echo "RCPT TO: <${_to}>"
echo "DATA"
echo "From: ${_from}"
echo "To: ${_to}"
echo "Subject: ${_subject}"
echo "Date: $(date)"
echo "X-Mailer: ${_xmailer}"
echo ""
echo "${_body}"
echo "."
echo "quit"
}
send_mail()
{
_host=$1
_port=$2
_data=$3
_interval=0.2
#nc -i ${_interval} ${_host} ${_port} < ${_data} > /dev/null 2>&1
nc ${_host} ${_port} < ${_data} > /dev/null 2>&1
_status=$?
sleep $_interval
return $_status
}
make_body()
{
_name=$1
cat << EOD
${_name}さん
2018年01月01日になりました。
あけましておめでとうございます。
今年もよろしくお願いします。
EOD
}
##
## main
##
# require commands
check_commands nc base64 nkf
host=example.co.jp
port=587
user=dharry
pass=userpassword
from=dharry@example.com
subject="I wish you a Happy new year 2018"
tolist[0]=aaa@gmail.com
tolist[1]=bbb@gmail.com
tolist[2]=ccc@gmail.com
for to in ${tolist[*]}
do
name=$(echo $to | awk -F"@" '{ print $1 }')
body=$(make_body $name | nkf -s)
data=$(mktemp -p /dev/shm/)
make_maildata "$host" "$user" "$pass" "$from" "$to" "$subject" "$body" > "${data}"
send_mail $host $port ${data}
[ -f "${data}" ] && rm -f "${data}"
done