プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Amazon Simple Email Service(SES)のSMTP機能を使ってみる。サーバサイド編

 前回、Amazon Simple Email Service(SES)のSMTP機能を使って、メールクライアント(ThunderBird,iPhone)からメールを送ってみました。簡単にメールは送れたものの、そもそもこのご時世で、メールアカウントでSMTPだけ必要とする事態が余りありません。
 そこで本命のサーバサイドのSMTPサーバとして利用してみることにしてみました。サンプルとしては、Railsを使っています。

Railsの設定



 ActionMailerの設定で、SESのSMTPのエンドポイント(URL)とユーザ名、パスワードを設定するだけです。簡単です。

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => 'email-smtp.us-east-1.amazonaws.com',
    :port => 587,
    :authentication => :login,
    :user_name => ENV['AWS_SES_USER'],
    :password => ENV['AWS_SES_PASS']
  }

※ソースにID,Passwordを設定するのが嫌なので、環境変数を使っています。

送信のテスト



 差出人を認証済みのメールアドレス(Verified Senders)にして送ると、何事もなく送信できます。

Received: from a194-136.smtp-out.amazonses.com (a194-136.smtp-out.amazonses.com [199.255.194.136])


 試しに未認証のアドレスから送ると、下記のようにエラーが出ます。その辺りはAPIから呼び出した場合と同じですね。

554 Message rejected: Email address is not verified.

感想



 従来、サーバサイドのプログラムからSESでメールを送ろうとすると、AWS SDKを使ってAPIを呼び出さないといけないので、それなりに面倒くさかったです。一方でEC2上にSMTPサーバを立ち上げると、メールの送信制限の解除依頼やGlobal IPの汚染されていなかの注意が必要だったりと、それも面倒くさかったです。何よりSMTPサーバのお守りというのは、何気に大変です。
 SESのSMTP機能を使うことにより、一定の制限があるものの上記の問題を解決できます。認証済みのメールアドレスからしか送れない問題は、事前にVerifyする仕組みを作っておけば解決出来るのかなぁと思います。それ以前に、不特定のメールアドレスから送るという要件はあまりありませんし。今までSESの実戦投入をして来ませんでしたが、これからはSES SMTPを基本に考えたいと思います。是非、お試しあれ!!


See Also:
Amazon Simple Email Service(SES)のSMTP機能を使ってみる。メールクライアント編
Amazon Simple Email Service(SES)のメール送信テスト用機能を試してみた
AWSで大量メール配信するなら、Amazon SESで決まり

参照:
【AWS発表】 Amazon Simple Email Service (SES)がSMTPをサポート