概要
個人開発において、Railsのdeviseから配信されるメールは、これまでGmailを使用していたのですが、せっかくドメインを取得したので、AWS SESからメールを送信することにしました。
今回はRailsにおいて、deviseが送信するメールをAWS SESから配信する方法について書きます。
前提
- Rails 5.2.0
- Route53でドメインを取得済みである
- PublicIPでアクセスできるサービスが存在する
手順
SESの設定
SESはデフォルトでは特定のメールアドレスには設定さえすれば、送信することができます。
しかし、多くのWebサービスは不特定多数のユーザーにメールを送信するため、その設定を行います。
ドメイン設定
Identity Management > Domains > Verify a New Domain
Verify a New Domain を押下すると、ポップアップが出てドメインの入力を求められます。
取得したドメインを入力し、Generate DKIM Settingsもチェックします。*1
Route53でドメインを取得している場合は、Use Route53ボタンを押下すれば、AWSの方で自動でRecord Setを設定してくれます。
しばらく時間をあけると
Identity Management > Domains > 登録したドメイン にアクセスするとVerificationとDKIMのステータスがverifiedになっています。
サンドボックス状態の解除
Email Sending > Sending Statisticsにアクセスすると、上記のような警告がでます。
現状、特定のメールアドレスにしか送信できない送信制限がかかっているので、サポート制限緩和申請をする必要があります。
上記の通り、各種項目を入力します。
1日くらいすると、AWSの審査の末、SESからメール送信が可能になります。
メール送信テスト
Identity Management > Domains > Send a Test Email から、任意のメールアドレスにメール配信が可能になります。
Send Test Mailボタンを押し、メールが受信できれば成功です。
Rails(devise)の設定
SES自体が使えるようになったので、今度はRails側の設定をしていきます。
AWS SDKをinstall
Railsでaws sdkを使用するためにGemfileに下記を追記します。
gem 'aws-ses'
ActionMailerの設定
config/initializers/aws.rbを新規で作成し、下記の通り、SESを使用するように変更します。
ActionMailer::Base.add_delivery_method( :ses, AWS::SES::Base, access_key_id: Rails.application.credentials.dig(:aws, :access_key_id), secret_access_key: Rails.application.credentials.dig(:aws, :secret_access_key), server: 'email.us-west-2.amazonaws.com' )
server はSESで選択したリージョンによって異なるので 公式ドキュメントのリージョンと Amazon SES から API (HTTPS) エンドポイントを確認してください。
次に、config/environments/production.rbの設定をSESを使用するように変更します。
config.action_mailer.default_url_options = { host: 'testrooper.com' } config.action_mailer.delivery_method = :ses
deviseの設定変更
config/initializers/devise.rbのconfig.mailer_sender
を修正します。
# config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' config.mailer_sender = 'Testrooper <noreply@testrooper.com>'
Mailerクラスの修正
最後にMailerクラスのfromの設定を変更して終わりです。
# frozen_string_literal: true class ApplicationMailer < ActionMailer::Base # default from: "from@example.com" default from: "Testrooper <noreply@testrooper.com>"
まとめ
これまで説明した通り、SESの設定自体はとても簡単です。
送信制限緩和申請のために、1日程度かかってしまうのですが、特に審査に落ちることもなく使えるようになりました。
また、Railsの方の設定も、難しいことはなく、設定ファイルの修正だけでした。
これまでGmailしか使っていなかったのですが、ドメインがあるのであれば、初手でSESを選択した方が良いかもしれませんね。
*1:DKIM とは DomainKeys Identified Mail の略で、受信した電子メールが「正当な送信者から送信された改ざんされていないメール」かどうかを調べることができる電子署名方式の送信ドメイン認証技術