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 -F, --file File path -fn, --from-name EMAIL_FROM_NAME
なお、実行の際にはPythonが必要になります。
利用例
利用時は、ほぼすべてのオプションを指定します。 -t はメール本文で、これはテキストファイルを指定します。-Fで添付ファイルを指定できますが、これは複数ファイルを指定できます。
./cmc.sh -u API_USER \ -k API_KEY \ -c standard \ -e test@smtps.jp \ -n テスト太郎 \ -f info@smtps.jp \ -fn 管理者 \ -s テストメールです \ -t body.txt -F image1.png \ -F image2.png
送信できていると、メールIDが返ってきます。
{"id":"\u003C6808a670-fa4b-11ea-bae3-9ca3ba311822@mta03.sandbox.smtps.jp\u003E"}
スクリプトについて
スクリプト全体はコマンドラインでCustomers Mail Cloudからメール送信を行うシェルスクリプトにて公開しています。ここでは抜粋して紹介します。
まずコマンドのヘルプとバージョン表示用の関数です。
#!/bin/bash PROGNAME=$(basename $0) VERSION='2.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()))' }
次にコマンドラインオプションを解析します。
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
添付ファイルの場合は multipart/form-data になり、JSONは利用しません。そこで次のようにcurlコマンドを組み立てます。まず添付ファイル用のコマンドラインオプションを作ります。
# 添付ファイル用のコマンド引数を作成 ARG = "" i=1 for e in ${FILES[@]}; do echo "attachment$i = ${e}" ARG="$ARG -F attachment$i=@$e" let i++ done
最後はcurlコマンドでメッセージを送信します。
curl -X POST \ -F "api_user=$API_USER" \ -F "api_key=$API_KEY" \ -F "to={"name": "$NAME","address": "$EMAIL"}" \ -F "from={"name": "$FROM_NAME","address":"$FROM"}" \ -F "attachments=${#FILES[@]}" \ -F "subject=$SUBJECT" \ --form-string "text=$(<$TEXT)" \ $ARG \ $URL
メールが届けば完成です。
まとめ
cmc.shはプログラミング知識がなくとも、簡単なシェルスクリプトの実行だけでメール送信ができます。例えばメールアドレスのリストがあれば、cmc.shを呼び出すコマンドを作るだけでメール送信ができます。改造して環境変数を使うようにすれば、呼び出し時の簡略化もできるでしょう。
シェルスクリプトは手軽に使えますので、様々な利用が可能です。ぜひ試してみてください。