LoginSignup
2
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-01

あけましておめでとうございます。
毎年、適当な言語を選んで、あけましておめでとうメールを送っています。
今年は、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
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0