Customers Mail CloudはSMTPまたはWeb APIを使ってメール送信を行えます。SMTPを使える環境であれば、Postflixなどを使う方がメール送信は簡単かも知れません。しかし、メール送信はスパムやフィッシングメールなどにも通じるので、メール送信機能を提供していないサービスも多数あります。
そこで使えるのがWeb APIです。Customers Mail CloudのWeb APIを手軽に使えるようにしたPythonライブラリをAWS Lambda上で使ってみました。
Pythonのコードについて
Lambdaのコードエディタ上では外部ライブラリが読み込めませんので、まずはローカルでファイルを作成します。ファイル名はlambda_function.pyとします。
そして同じディレクトリ内でライブラリをインストールします。
$ pip install CustomersMailCloud -t .
lambda_function.pyでは、JSONライブラリとOSライブラリを読み込みます。OSライブラリはLambdaで設定する環境変数を読み取るために指定します。
import json import os from CustomersMailCloud.Client import CustomersMailCloud
実行する関数はデフォルトのlambda_handlerになります。まず環境変数で設定するAPI_USER、API_KEYで初期化します(環境変数は後述)。エンドポイントは契約状態によって異なるので注意してください。
def lambda_handler(event, context): client = CustomersMailCloud(os.environ['API_USER'], os.environ['API_KEY']) client.trial() # 契約状態によって異なります。 # 後述
続いてメール本文を設定します。送信元名、アドレス、件名も環境変数から設定しています。
body = json.loads(event['body']) client.addTo(body['to']['name'], body['to']['address']) client.setFrom(os.environ['FROM_NAME'], os.environ['FROM_ADDRESS']) client.subject = os.environ['SUBJECT'] client.text = body['body']
後は実際に送信を行います。
try: res = client.send() return { 'statusCode': 200, 'body': json.loads(res) } except Exception as e: return { 'statusCode': 403, 'body': e }
ここまでの処理でLambdaを使ったメール送信処理が閑静です。インストールしたライブラリを含めてZip圧縮して、Lambdaにアップロードします。
環境変数の設定
今回設定した環境変数は以下の通りです。
- API_USER
- API_KEY
- FROM_NAME
- FROM_ADDRESS
- SUBJECT
API Gatewayと組み合わせる
続いて、このLambdaを外部から実行するためのトリガーとして、API Gatewayを設定します。REST APIとして設定し、プロキシ統合を指定します。これで、例えば次のようにWeb APIを呼び出せるようになります。
POST https://2aq...922.execute-api.us-east-1.amazonaws.com/prod/CMCPython
curlコマンドで書くと、次のようになります。
curl -XPOST -d '{"to": {"name": "メールテスト', "address": "test@smtps.jp"}, "body": "問い合わせの本文"}' https://2aq...922.execute-api.us-east-1.amazonaws.com/prod/CMCPython
CORSを許可していれば、Webフォームから使うこともできます。
まとめ
Customers Mail Cloudを使えばLambdaを使ったメール送信も簡単に実装できます。マイクロサービスの場合、個々の機能におけるコード量はなるべく少ない方がメンテナンスもしやすいでしょう。ぜひメール送信時にお試しください。