Customers Mail CloudではSMTPを使ったメール送信のほか、Web APIを使ったメール送信が可能です。これまでNode.js、Ruby、Pythonなど各種言語で実装したライブラリを紹介してきましたが、今回はちょっと変わったところでシェルスクリプトを使ってみました。
CLIからメール送信できるので、とても簡単です。ぜひお試し下さい。
コマンドについて
まずコマンドのヘルプを紹介します。オプションが多いので注意してください。
$ ./cmc.sh --help Usage: cmc.sh [OPTIONS] This script is sending email from shell script by Customers Mail Cloud. Options: -h, --help --version -c, --contract trial | standard | subdmain -u, --api-user API_USER -k, --api-key API_KEY -e, --email to@example.com -n, --name EMAIL_NAME -f, --from from@example.com -s, --subject EMAIL_SUBJECT -t, --text File path -fn, --from-name EMAIL_FROM_NAME
なお、実行の際にはPythonが必要になります。
利用例
利用時は、ほぼすべてのオプションを指定します。 -t はメール本文で、これはテキストファイルを指定します。
./cmc.sh -u API_USER \ -k API_KEY \ -c standard \ -e test@smtps.jp \ -n "テスト太郎" \ -f info@smtps.jp \ -fn 管理者 \ -s "テストメールです" \ -t body.txt
送信できていると、メールIDが返ってきます。
{"id":"\u003C6808a670-fa4b-11ea-bae3-9ca3ba311822@mta03.sandbox.smtps.jp\u003E"}
スクリプトについて
スクリプト全体はコマンドラインでCustomers Mail Cloudからメール送信を行うシェルスクリプトにて公開しています。ここでは抜粋して紹介します。
まずコマンドのヘルプとバージョン表示用の関数です。
#!/bin/bash PROGNAME=$(basename $0) VERSION='1.0' usage() { echo "Usage: $PROGNAME [OPTIONS]" echo " This script is sending email from shell script by Customers Mail Cloud." # : 省略 exit 1 } escape () { printf '%s' "$1" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))' }
さらにメール本文(改行あり)のドキュメントをJSONに変換する関数です。
file_to_jsonparam (){ IFS=$'\n' OUTPUT="/tmp/file_to_jsonparam" echo "" > ${OUTPUT} cat $1 | while read LINE do ESCAPED_LINE=`echo $LINE | sed -e "s/\([\&\:\"\<\>\{\}\/]\)/__ESCAPE__\1/g" | sed -e "s/__ESCAPE__/\\\\\/g"` echo -n "${ESCAPED_LINE}\\r\\n" >> ${OUTPUT} done RESULT=`cat ${OUTPUT}` rm -f ${OUTPUT} echo ${RESULT} }
次にコマンドラインオプションを解析します。
for OPT in "$@" do case $OPT in -c | --contract) if [[ -z "$2" ]] || [[ "$2" =~ ^-+ ]]; then echo "$PROGNAME: option requires an argument -- $1" 1>&2 exit 1 fi CONTRACT=$2 shift 2 ;; # : 省略 esac done
さらに必須チェックをします。
if [ "$FROM_NAME" = '' ]; then FROM_NAME="\"\"" fi # : 省略 if [ "$API_KEY" = '' ]; then echo "$PROGNAME: API Key is required. Using --api-key or -k YOUR_KEY." 1>&2 exit 1 fi
Web APIのエンドポイントは契約によって異なりますので、それを指定します。
if [ "$CONTRACT" = 'trial' ]; then URL='https://sandbox.smtps.jp/api/v2/emails/send.json' elif [ "$CONTRACT" = 'standard' ]; then URL='https://te.smtps.jp/api/v2/emails/send.json' else URL="https://$CONTRACT.smtps.jp/api/v2/emails/send.json" fi
Web API用のJSONを生成します。パラメータはあらかじめエスケープ処理しているので、変数を単純に適用するだけでできあがります。
# Make JSON json=$(cat << EOS { "api_user" : $API_USER, "api_key" : $API_KEY, "to" : [ { "name" : $NAME, "address" : $EMAIL } ], "from" : { "name" : $FROM_NAME, "address" : $FROM }, "subject" : $SUBJECT, "text" : "$TEXT" } EOS )
最後はcurlコマンドでメッセージを送信します。
curl -X POST -H "Content-Type: application/json" \ -d "$json" $URL
メールが届けば完成です。
まとめ
cmc.shはプログラミング知識がなくとも、簡単なシェルスクリプトの実行だけでメール送信ができます。例えばメールアドレスのリストがあれば、cmc.shを呼び出すコマンドを作るだけでメール送信ができます。改造して環境変数を使うようにすれば、呼び出し時の簡略化もできるでしょう。
シェルスクリプトは手軽に使えますので、様々な利用が可能です。ぜひ試してみてください。