Customers Mail Cloud用Pythonライブラリを使ってAWS Lambdaでメール送信を行う

Customers Mail CloudはSMTPまたはWeb APIを使ってメール送信を行えます。SMTPを使える環境であれば、Postflixなどを使う方がメール送信は簡単かも知れません。しかし、メール送信はスパムやフィッシングメールなどにも通じるので、メール送信機能を提供していないサービスも多数あります。

そこで使えるのがWeb APIです。Customers Mail CloudのWeb APIを手軽に使えるようにしたPythonライブラリをAWS Lambda上で使ってみました。

CustomersMailCloud · PyPI

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

f:id:moongift:20200414110858p:plain
環境変数の設定

API Gatewayと組み合わせる

続いて、このLambdaを外部から実行するためのトリガーとして、API Gatewayを設定します。REST APIとして設定し、プロキシ統合を指定します。これで、例えば次のようにWeb APIを呼び出せるようになります。

f:id:moongift:20200414110924p:plain
API Gatewayを設定する

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フォームから使うこともできます。

f:id:moongift:20200414110952p:plain
メールを受信

まとめ

Customers Mail Cloudを使えばLambdaを使ったメール送信も簡単に実装できます。マイクロサービスの場合、個々の機能におけるコード量はなるべく少ない方がメンテナンスもしやすいでしょう。ぜひメール送信時にお試しください。

クラウドからのメール送信を簡単に。確実に。| Customers Mail Cloud

CustomersMailCloud · PyPI