Deviseで確認メールを設定するにはどうすればよいですか?


127

アクションメーラーをセットアップしていない場合など、開発と本番の両方でDeviseのサインアップ確認メールをゼロからセットアップする方法を説明するチュートリアルはありますか?

グーグル検索はこれに関連するたくさんの別々の部分を見つけたところです。1つの作品で十分に説明できるものはなく、それらがどのように組み合わさるかはわかりません。そこに段階的な説明がありますか、それとも最初のステップを説明するものがありますか?


ようやく機能しました。以下の承認された回答のすべての手順を実行し、その後、environment.rbファイルに以下を追加しました。

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
   :tls => true,
   :address => "smtp.gmail.com",
   :port => 587,
   :domain => "gmail.com",
   :authentication => :login,
   :user_name => "[username]",
   :password => "[password]"
 }

回答:


208

1. Model.deviseの呼び出しに確認可能なものを含めてください

class User < ActiveRecord::Base
  devise :database_authenticatable, :confirmable ...
end

2.ユーザーの移行に確認可能なものを必ず追加してください

create_table :users do |t|
  t.database_authenticatable
  t.confirmable
  ...
end

devise 2.0+を使用している場合、deviseは移行ヘルパーを提供しないため、これは失敗しt.confirmable、エラーが発生します。代わりに、移行ガイドから「確認可能」というラベルの付いたブロックをコピーしてください

3.次のコマンドのいずれかを使用してデバイスビューを生成します。これにより、デバイスメーラービューを上書きできます。

rails generate devise:views # global
rails generate devise:views users # scoped

設定内devise/mailer/confirmation_instructions.html.erbまたはusers/mailer/confirmation_instructions.html.erb設定に応じて、メーラービューを上書きできるようになりました

4. 開発環境の場合、次の構成行を追加します/config/environments/development.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}

5.については本番環境/config/environments/production.rbあなたは次のようなものを使用することができます(:25あなたがローカルホスト上のSMTPサーバーを持っていると仮定):

config.action_mailer.default_url_options = {:host => 'yourdomain.com'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => "127.0.0.1",
  :port    => 25,
  :domain  => 'yourdomain.com'
}

6開発中のセットアップをテストするには、開発中のSMTPサーバーとして使用するmailcatcher gemをインストールし、すべての受信メールをキャッチして表示しますhttp://localhost:1080/

gem install mailcatcher

インストールしたら、次のコマンドでメールキャッチャーサーバーを起動します。

mailcatcher

おもちゃのSMTPサーバーがポート1025で実行されてメールをキャッチし、HTTPポート1080でそれを非難します。

これでアカウントを作成し、確認を確認できます。


わあ、驚くほど包括的な答えに感謝します。メールキャッチャーがメールをキャッチするように機能していますが、実際には受信トレイにメールが表示されません。2つの異なるメールアドレスを試し、両方のスパムフォルダを確認しました。私がここで見逃しているものはありますか?(私は開発モードです)。
jyli7

1
開発時には、メールを実際にアドレスに配信する必要はありません。Mailcatcherはlocalhost:1080に Webインターフェースを備えており、これを使用して、キャッチされたEメールを開いて確認できます。これがポイントであり、開発を容易にします。ただし、本番環境では、実際のSMTPサーバー(Google Apps、qmail、postfixなど、システム管理者に話しかける)を使用する必要があります
clyfe

3
そして、サーバーを再起動することを忘れないでください!
マットボンド

10
Devise 2.0では移行ヘルパーが提供されなくなったためt.confirmable、エラーが発生します。代わりに、ブロックは、彼らの移行ガイドから「確認できる」とラベルされたコピー:github.com/plataformatec/devise/wiki/...
ロス・アレン

1
素晴らしいチュートリアル...共有するためのおかげで.. 1 ..また価値が参照する方法:追加:ユーザーに確認できるページ。
Arup Rakshit

7

もう一度編集する必要があると思います...ポート番号。引用符で囲む必要があります..このように:-

:port => "587",

Rails 3.2.0 / ruby​​ 1.9.2で問題に直面しました


正しい。または"1025"メールキャッチャーを使用している場合。
エティエンヌ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.