2013-07-15 openssl を使って Gmail からメール送信するスクリプト

openssl を使用して Gmail からメール送信する必要が出てきた
ネット上では、いろんなサンプルがあったが、自分の環境では動かなかったので、
サンプルを参考にして作成した

openssl のオプションに「-crlf」「-quiet」
base64 のオプションに「--wrap=0」
をつけるのがポイント

使用感を、mail コマンドと同じようにしたので、
メール送信するときは下記のようにする

echo "testbody" | smtp-gmail.sh -s 'testsubject' 'testmailto@example.org'


--- smtp-gmail.sh ---
 #!/bin/bash

MAILFROM='foo@gmail.com'
USERNAME='foo@gmail.com'
PASS='testpassword'

#########################
### this is no arg setting
MAILTO='bar@gmail.com'
MAILSUB="no title"
GMAILSERVER="smtp.gmail.com:587"
PG_OPENSSL="openssl"
########################
GMAILAUTH=`echo -en "${USERNAME}\\0${USERNAME}\\0${PASS}" | base64 --wrap=0`
MAILBODY=`cat - | sed 's/^.$/../g'`

###echo "${GMAILAUTH}"
###exit 0

#
# usage
#
_usage() {
  echo "usage:"
  echo "${0##*/} [-s subject] mail-to ‹ mailbody.txt"
  echo ""
  echo "-s XX   mail-subject"
  echo ""
  exit 1
}

#
# getopts
#
while getopts :s: OPT; do
  case ${OPT} in
    s) MAILSUB="${OPTARG}";
       shift;
       shift;
       MAILTO="${1}";
        ;;
    :|\?) _usage;;
    *)    _usage;;
  esac
done

( sleep 4;
echo "EHLO "`hostname`;
sleep 2;
echo "AUTH PLAIN ${GMAILAUTH}"
sleep 2;
echo "MAIL FROM: <${MAILFROM}>";
sleep 2;
echo "RCPT TO: <${MAILTO}>";
sleep 2;
echo "DATA";
sleep 2;
echo "from: <${MAILFROM}>";
echo "to: <${MAILTO}>";
echo "Subject: ${MAILSUB}";
echo "";
echo "${MAILBODY}";
echo ".";
sleep 2;
echo "QUIT";
) | "${PG_OPENSSL}" s_client -starttls smtp -crlf -quiet -connect "${GMAILSERVER}"

--------