前回、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で決まり