Bash
curl

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

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

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

今年は、libcurl使ってC言語にしようとかと思ったのですが、面倒になりbash+curlになりました。


Environment


  • Windows 10

  • git for Windows + curl.exe


Code

git for Windows 入れるだけで、Bashが使えるのはマジに便利。

#!/bin/bash

export LANG=C
export LC_ALL=C

send_mail()
{
_host=$1
_user=$2
_password=$3
_from=$4
_to=$5
_subject=$6
_body=$7

_msgtxt=`/usr/bin/mktemp`
_xmailer="Bash+Curl Mailer"

echo "From: ${_from}" >> "${_msgtxt}"
echo "To: ${_to}" >> "${_msgtxt}"
echo "Subject: ${_subject}" >> "${_msgtxt}"
echo "Date: $(date)" >> "${_msgtxt}"
echo "X-Mailer: ${_xmailer}" >> "${_msgtxt}"
echo "" >> "${_msgtxt}"
cat "${_body}" >> "${_msgtxt}"

curl --url "smtp://${_host}" \
--mail-from "${_from}" \
--mail-rcpt "${_to}" \
--user "${_user}:${_password}" \
--upload-file ${_msgtxt}

_status=$?
[ -f "${_msgtxt}" ] && rm -f "${_msgtxt}"
return $?
}

make_body()
{
_name=$1
cat << EOD
${_name}さん
2019年01月01日になりました。
あけましておめでとうございます。
今年もよろしくお願いします。
EOD
}

##
## main
##

host=example.co.jp:587
user=dharry
pass=userpassword
from=dharry@example.com
subject="I wish you a Happy new year 2019"

tolist[0]=hoge1@example.com
tolist[1]=foo@example.co.jp
tolist[2]=bar@example.org

for to in ${tolist[*]}
do
name=$(echo $to | awk -F"@" '{ print $1 }')
body=$(mktemp)
make_body $name > "$body"
send_mail "$host" "$user" "$pass" "$from" "$to" "$subject" "$body"
[ -f "${body}" ] && rm -f "${body}"
done