Edited at

Bashであけましておめでとうございます!

More than 1 year has passed since last update.

あけましておめでとうございます。

毎年、適当な言語を選んで、あけましておめでとうメールを送っています。

今年は、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