概要

LocalStack を使ってローカル環境で AWS SES を動かせるようにします。

Docker Compose のセットアップ

LocalStack の Docker イメージを使って SES だけを起動させるよう設定します。

version: "3"

services:
  localstack:
    image: localstack/localstack
    ports:
      - 4579:4579
    environment:
      - SERVICES=ses
      - DEFAULT_REGION=us-west-2

保存したら、docker-compose up して起動しておきます。

SDK を使って接続してみる

次は SDK for Ruby を使ってローカル環境の SES に接続してみます。

require 'aws-sdk-ses'

client = Aws::SES::Client.new(region: 'us-west-2', endpoint: 'http://localhost:4579')

まずはインスタンスを生成します。その時に endpoint でローカルホストを指定してあげます。

client.verify_email_identity(email_address: 'sender@example.com')

次に送信者の E メールアドレスを検証させます。
これをしないと Aws::SES::Errors::MessageRejected となってメールを送ることができません。

あとは通常と同じように send_email を呼び出してやれば、うまくいきます。

resp = client.send_email(
    destination: {
      to_addresses: ['user@example.com']
    },
    message: {
      body: {
        text: {
          data: 'test local'
        }
      },
      subject: {
        data: 'local title'
      }
    },
    source: 'sender@example.com'
  )
puts resp #=> {:message_id=>"atqvvxkubdyizegr-pezwthgw-glxd-czoe-osqu-gugatgymuiyx-awwpde"}