開発環境ではメール送信のテストができていたんだけど、
本番環境でメール送信ができないんだ・・・。
何でのかな・・・?
テスト環境では実際には擬似的なメール送信になっていることが多いけど、本番環境ではメールサーバを使わないとメールが送信できないんだ。
Amazon SESを使うことで簡単にメール送信ができるようになるから解説していくね!
Amazon SESとは?
Amazon SESとはAmazon Simple Email Serviceの略でメール配信をするサービスです。
独自ドメインでも利用することができ、AWSの他のサービスと連携することもできます。
特徴
導入コストが低い
Amazon SESを利用するために最低限必要になるものは、AWSアカウントとメールアドレス、ドメインのみです。
メールサーバーを構築したり設定したりする必要がなく複雑な設定をせずに利用できるので、導入コストがとても低く手軽に始めることができます。
低価格な料金
料金は利用した分だけ支払えば良いため、固定費や最低料金はありません。
またAWSのEC2でホストされているアプリケーションから送信したときは無料で送信できる枠もあります。
信頼性の高い配信が可能
Amazon SESではスパムメールを受信しないための対策を施しているため、信頼性の高いメールを配信することができます。
スパムメールではなくとも信頼性の低いメールは受信されないことが多いですが、信頼性の高いメールは受信される確率が高いため、確実にメールを届けることができます。
Gemのインストール
まずはAmazonが提供している機能を簡単に扱えることができるGemをインストールします。
このGemを使うことでAmazon SESも扱えることができます。
Gemファイルに以下コードを追記します。
gem 'aws-sdk-rails', '~> 3'
本番環境設定ファイルを編集
配信方法の設定
本番環境でAmazon SESが使えるように`config/environments/production.rb`ファイルを編集していきます。
公式のドキュメントによると、このGemではActionMailerの配信方法としてSES
とSESV2
がサポートされています。
このどちらかを配信方法として設定していきます。
config.action_mailer.delivery_method = :ses # or :sesv2
資格情報の設定
アクセスキーとシークレットアクセスキーを使ってAmazon SESを使える資格があることを証明します。
require 'json'
# Assuming a file "path/to/aws_secrets.json" with contents like:
#
# { "AccessKeyId": "YOUR_KEY_ID", "SecretAccessKey": "YOUR_ACCESS_KEY" }
#
# Remember to exclude "path/to/aws_secrets.json" from version control, e.g. by
# adding it to .gitignore
secrets = JSON.load(File.read('path/to/aws_secrets.json'))
creds = Aws::Credentials.new(secrets['AccessKeyId'], secrets['SecretAccessKey'])
Aws::Rails.add_action_mailer_delivery_method(
:ses, # or :sesv2
credentials: creds,
region: 'ap-northeast-1',
# some other config
)
region
は利用するリージョンを指定します。
東京リージョンはap-northeast-1
になります。
ホストの設定
メールを送信するホストを設定します。
https通信をしているときはprotocol: 'https'
を指定します。
protocolを指定しないときのデフォルトのprotocolはhttp
となっています。
config.action_mailer.default_url_options = { host: 'https://example.com', protocol: 'https' }
メール送信時にリジェクトされるとき
Amazon SESではデフォルトの状態ですとサンドボックスモードというものになっています。
これは詐欺や悪用を防ぎ、送信者としての評判を守るための制限となっています。
そのため検証済みIDとして許可され登録しているドメイン、サブドメイン、またはメールアドレスのみに送信できるようになっています。
サウンドボックスモードの状態でメール送信をすると以下のようなエラーが発生することがあります。
Email address is not verified. The following identities failed the check in region AP-NORTHEAST-1: example@example.com (Aws::SES::Errors::MessageRejected)
本番環境でこの状態ですと使い物にならないので、本番稼働する際はサンドボックスモードの解除の申請をします。
アカウントダッシュボードに表示のある「本番稼働リクエスト」よりサポートへ解除申請することで、送信制限の緩和とサンドボックスモードが解除され、どこへでもメールを送れるようになります。
「本番稼働リクエスト」をするとき申請内容には注意をしましょう。
実際に申請をしたことがあるのですが、簡単な内容で申請したところ、以下のような再申請のメールが届いてしまいました。
平素は Amazon Web Servicesをご利用いただき、誠にありがとうございます。
このたびは、送信制限の申請をいただきありがとうございます。残念ながら現時点ではお客様のユースケースについて十分な情報がないため、この申請を承認することはできません。
Amazon SES の使用計画について詳しい情報をご提供いただければ、申請が承認される可能性があります。返信の際に、お客様のメール送信プロセスや手順について、可能な限り詳しい情報を記載してください。
たとえば、メールを送信する頻度、受信者リストのメンテナンス方法、バウンス、申し立て、解除申請の管理方法についてご説明ください。送信する予定のメールのサンプルをご提供いただければ、お客様が高品質のコンテンツを送信していることを確認するために役立ちます.
この情報を受け取り次第、お客様の申請を審査させていただきます。24時間以内にご連絡をいたします。必要な情報をすべてご提示いただいた場合は、24時間以内に申請を承認いたします。追加で情報が必要な場合は、申請の実装に長くかかる可能性がございますことをご了承ください。
Amazon Web Services にお問い合わせいただき、誠にありがとうございます。
申請を通過するためにはメール送信のプロセスや手順について詳しい情報の記載が必要みたいです。
申請する際は以下の内容に注意しながら内容を記載してみてください。
- メールを送信する頻度
- 受信者リストのメンテナンス方法
- バウンス、申し立て、解除申請の管理方法に
- 送信する予定のメールのサンプル
まとめ
Amazon SESとRailsで利用する方法について解説したよ!
- Amazon SESとはメール配信をするサービス
- Gemを使うことで簡単にAmazon SESを利用できる
- 本番稼働するときはサンドボックスモードの解除の申請が必要
Amazon SESの仕組みと使い方が分かったよ!