質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.89%

productionモードでDeviseの確認メールが送信されてこない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 178

begenner

score 60

現在AWS(amazon linux2)にRailsアプリをデプロイし、ブラウザでの動作確認をしていました。
developmentモードでは

  • 確認メールの送信(letter_opener_web を使用)
  • パスワードリセット時のメール認証

は動作を確認できましたが、AWS上(productionモード、メール送信にはGmailを使用)では登録したメールに確認・変更のためのメールが送信されてきません。

Ruby on Rails - rails4 devise 確認メールを送れない|teratail

を参考に設定を確認してみましたがわかりませんでした(m_ _m)

もしわかる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m_ _m)

【前提条件】
下記の語句は置き換えてあります

  • Railsのアプリ名: 【webapp】
  • 取得済みのドメイン: 【myDomain】 
  • Railsアプリ用のGmail: 【appGmail】
  • 自分のグローバルIP: 【my_global_ip】
  • 自分のメールアドレス:【myEmail】

動作環境

Rails AWS
Ruby: 2.4.5 Amazon linux2
Rails: 4.2.11.1 nginx: 1.16.1
Devise: 4.7.1 EC2、RDS(MySQL)
dotenv-railsを使用 HTTPS(Route53)設定済

期待する動作

productionモードでアカウント作成用の確認メールが入力したメールアドレスに送信されること

エラー内容

  • ブラウザ上ではエラーは発生していない(message A message with a confirmation link has been sent to your email address. Please follow the link to activate your account.が表示される)
  • 該当しそうなログ
# I, [2019-10-24T18:37:09.471732 #3473]  INFO -- : Started POST "/users" for 【my_global_ip】 at 2019-10-24 # 18:37:09 +0900
# I, [2019-10-24T18:37:09.473439 #3473]  INFO -- : Processing by # Public::Settings::Users::RegistrationsController#create as HTML
# I, [2019-10-24T18:37:09.473501 #3473]  INFO -- :   Parameters: {"utf8"=>"✓", # "authenticity_token"=>"MfhA0E7vAiJBw5gBdP/tmR4JNS6MMxET47auIKR98k/ilf/# lqVbGIDgUb9pRIMgDOBz3HQc/ybDyULvECDqv2g==", "user"=>{"email"=>"【myEmail】", # "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"アカウント作成"}
# D, [2019-10-24T18:37:09.640294 #3473] DEBUG -- :    (0.7ms)  BEGIN
# D, [2019-10-24T18:37:09.643581 #3473] DEBUG -- :   User Exists (0.7ms)  SELECT  1 AS one FROM # `users` WHERE `users`.`email` = BINARY '【myEmail】' LIMIT 1
# D, [2019-10-24T18:37:09.645892 #3473] DEBUG -- :   SQL (0.6ms)  INSERT INTO `users` (`email`, # `encrypted_password`, `created_at`, `updated_at`, `confirmation_token`, `confirmation_sent_at`) VALUES # ('【myEmail】', '$2a$11$IipWgiWvpH33/IAHrbBS2eqssRnT4B0cIYjigiS/a0mZf1.VerfBy', # '2019-10-24 18:37:09', '2019-10-24 18:37:09', '1yBpxGtz8xkboY2y-EPv', '2019-10-24 18:37:09')
# D, [2019-10-24T18:37:09.648726 #3473] DEBUG -- :    (2.2ms)  COMMIT
# I, [2019-10-24T18:37:10.187504 #3473]  INFO -- :   Rendered vendor/bundle/ruby/2.4.0/gems/devise-# i18n-1.8.2/app/views/devise/mailer/confirmation_instructions.html.erb (1.0ms)
# D, [2019-10-24T18:37:10.438328 #3473] DEBUG -- :
# Devise::Mailer#confirmation_instructions: processed outbound mail in 786.2ms
# I, [2019-10-24T18:37:13.312854 #3473]  INFO -- :
# Sent mail to 【myEmail】 (2874.3ms)
# D, [2019-10-24T18:37:13.312946 #3473] DEBUG -- : Date: Thu, 24 Oct 2019 18:37:10 +0900
# From: 【appGmail】
# Reply-To: 【appGmail】
# To: 【myEmail】
# Message-ID: <5db170c66c75b_d912ac364ba4f581921c@ip-10-0-1-127.ap-# northeast-1.compute.internal.mail>
# Subject: Confirmation instructions
# Mime-Version: 1.0
# Content-Type: text/html;
#  charset=UTF-8
# Content-Transfer-Encoding: 7bit
# 
# <p>Welcome 【myEmail】!</p>
# 
# <p>You can confirm your account email through the link below:</p>
# 
# <p><a href="【myDomain】/users/confirmation?# confirmation_token=1yBpxGtz8xkboY2y-EPv">Confirm my account</a></p>

該当しそうなコード

参考にしたサイト: Ruby on Rails - rails4 devise 確認メールを送れない|teratail

  • (1 / 2) config/environments/production.rb
Rails.application.configure do
  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true


  # Disable serving static files from the `/public` folder by default since
  # Apache or NGINX already handles this.
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

  config.assets.js_compressor = :uglifier
  # config.assets.css_compressor = :sass
  config.assets.compile = false
  config.assets.digest = true
  # Ignore bad email addresses and do not raise email delivery errors.
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
  # 本番環境のURL指定
  config.action_mailer.default_url_options = { host: '【myDomain】 ' }
  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    domain: 'gmail.com',
    user_name: ENV['gmail_address'],
    password: ENV['gmail_password'],  # Gmailアカウントにログインしてから作成したアプリ用の固有パスワード
    authentication: 'plain',
    enable_starttls_auto: true
  }

  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
  config.log_formatter = ::Logger::Formatter.new
  config.active_record.dump_schema_after_migration = false
  # 静的なファイルをRailsから返す
  config.serve_static_files = true
end
  • (2 / 2) config/initializers/devise.rb(デフォルトのコメントアウト行は削除してあります)
# config/initializers/devise.rb

# frozen_string_literal: true

Devise.setup do |config|
  # 変更
  # config.secret_key = ENV['rails_secret_key']
  config.secret_key = ENV['rails_secret_key'] if Rails.env == 'production'
  config.mailer_sender = ENV['gmail_address']
  require 'devise/orm/active_record'
  config.case_insensitive_keys = [:email]
  config.strip_whitespace_keys = [:email]
  config.skip_session_storage = [:http_auth]
  config.stretches = Rails.env.test? ? 1 : 11
  config.reconfirmable = true
  config.expire_all_remember_me_on_sign_out = true
  config.password_length = 8..128
  config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
  config.reset_password_within = 6.hours
  config.scoped_views = true
  config.sign_out_via = :get
  # google, facebook認証用の追加行
  config.omniauth :facebook, ENV['facebook_app_id'], ENV['facebook_app_secret']
  config.omniauth :google_oauth2, ENV['goole_omni_key'], ENV['google_omni_secret'], name: :google, scope: %w(email)
end
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

すいません、設定の反映がかなり遅かったようです(なぜ遅かったかはわかりません)
現在は問題なく動作しています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.89%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる