SESのSMTPインターフェースでメール送信

AWS運用自動化サービス「Cloud Automator」

EC2インスタンスからメールを送信したいという要望は時々出てきます。
AWSのメール送信サービスには、SES(Simple Email Service)があります。
SESでメール送信するには、「1.AWSのAPIを利用する」「2.SMTPインターフェースを利用する」の2通りがあります。
今回は後者のやり方を試してみました。

今回の構成

東京リージョンにはSESのSMTPエンドポイントがないため、今回はムンバイにしてみました。
海外リージョンを使いますが、メールというアプリケーション特性上、少々の遅延は問題はないかと思います。

ちなみにSESにはメール受信用に、受信エンドポイントというのもあるのですが、ムンバイは含まれていません。
利用可能なSESのエンドポイントはこちらに記載があります。

SESの設定

SESインスタンスの作成といったものはなく、基本的に必要な作業はメールアドレスの認証ユーザー名・パスワードの取得のみです。

メールアドレスの認証

送信元メールアドレスの認証は、必須です。

SES > Email addresses > Verify a New Email Address

送信元メールアドレスを入力します。
基本的にどんなメールアドレスでもいいのですが、このすぐ後に確認メールが届くので、自分で受け取れるものにしましょう。

確認メールを受け取ったら、URLが記載されているので、そちらにアクセスします。

認証されました。

検証に成功しました

メールアドレスの確認に成功しました。このアドレスからのメール送信を開始できます。

Amazon SES の新規ユーザーの場合–上限緩和をまだ申請していない場合は、引き続きサンドボックス環境を使用しています。そのため、メールは確認済みのアドレスにのみ送信できます。新しいメールアドレスまたはドメインを確認するには、Amazon SES コンソールの [Identity Management] のセクションを参照してください。

こちらの文面の通りなんですが、サンドボックス環境にいる場合は、送信先メールアドレスにも制限がかかります。
状況に応じて、メールアドレスの認証の追加や、上限緩和申請をしましょう。

認証されると、Verifiedとなります。

ユーザー名・パスワードの取得

SESのSMTPインターフェースを使う場合、SMTP認証(SMTP AUTH)は必須です。
SMTP認証では、ユーザー名とパスワードのペアで認証されますが、SESはそれにIAMユーザー(のアクセスキーとシークレットアクセスキー)を利用します。

SES > SMTP Settings > Create My SMTP Credentials

IAMユーザーを作成するので、IAMユーザー名を入力します。
やや混乱しやすいのですが、このIAMユーザー名はメール送信の際は使わないですし、送信元メールアドレスとも関係がありません。
SMTP認証のユーザー名は、IAMユーザー名ではなく、アクセスキーとなります。

作成ボタンを押すと、SMTPユーザー名とSMTP パスワードが表示されます。
これをメモして、SES側の設定は完了です。

EC2インスタンスの構築

EC2インスタンスからSMTPインターフェースを利用する条件

Amazon Linux 2から、メールを送信できるようにします。
どんなメール送信ソフトやSMTPライブラリを使うかによって設定は異なりますが、以下の条件をクリアする必要があります。

  • SMTP認証を使い、IAMユーザーのアクセスキーとシークレットアクセスキーを指定する
  • TLSを使う
  • SESのエンドポイントを指定する
  • ポート番号を587に指定する(25も可能ですが、E メール送信制限解除申請が必要)
  • 送信元メールアドレスにはSESで認証済みのものを指定する

mailxの導入

今回は、mailxコマンドを使って試してみました。

mailxのインストール

~/.mailrc

メール送信してみる

送信できました。

(おまけ)証明書エラーについて

メール送信できましたが、よく見ると証明書のエラーが出ています。

実は.mailrcの設定で、証明書の検証でエラーが出ても先に進めるように set ssl-verify=ignoreを入れていました。
その設定を削除すると、以下のように送信失敗します。

証明書のエラーを出さないためには、ルート証明書をインポートする必要があります。
Amazon SES + mailx で「Error in certificate: Peer’s certificate issuer is not recognized.」が出た時の対処法を参考にして、再度メールしてみた結果が以下となります。

AWS運用自動化サービス「Cloud Automator」