Devise로 이메일 확인을 어떻게 설정합니까?


127

Action Mailer가 설정되어 있지 않은 경우 (개발 및 프로덕션 모두에서) Devise의 가입 확인 이메일을 처음부터 새로 설정하는 방법을 설명하는 자습서가 있습니까?

Google 검색은 이와 관련하여 여러 가지 개별적인 부분을 발견했습니다. 한 조각도 충분히 설명 할 수 없으며, 그것들이 어떻게 조화를 이루는 지 잘 모르겠습니다. 단계별 설명이 있거나 초기 단계를 설명하는 내용이 있습니까?


마침내 작동했습니다. 아래에서 허용 된 답변의 모든 단계를 수행 한 후 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

고안 2.0 이상을 사용하는 경우 고안이 더 이상 마이그레이션 도우미를 제공하지 않으므로 오류가 발생하기 때문에 실패합니다 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 개발중인 설정을 테스트하려면 mailcatcher gem을 설치하십시오. 개발중인 SMTP 서버로 사용하여 수신되는 모든 메일을 받고 다음에 표시합니다 http://localhost:1080/.

gem install mailcatcher

설치가 완료되면 다음 명령을 사용하여 mailcatcher 서버를 시작하십시오.

mailcatcher

토이 SMTP 서버는 포트 1025에서 실행되어 이메일을 포착하여 HTTP 포트 1080에서 대체합니다.

이제 계정을 만들고 확인을 볼 수 있습니다.


와우, 그 포괄적 인 답변에 감사드립니다. 메일 캐처가 ​​전자 메일을 잡는 것처럼 작동하지만 실제로받은 편지함에 전자 메일이 표시되지 않습니다. 두 개의 다른 이메일 주소를 사용해 보았고 둘 다 스팸 폴더를 확인했습니다. 여기에 빠진 것이 있습니까? (저는 개발 모드에 있습니다).
jyli7

1
개발시 실제로 이메일을 주소로 전달할 필요는 없습니다. Mailcatcher에는 localhost : 1080 에 웹 인터페이스가있어 잡은 이메일을 열어서 볼 수 있습니다. 즉, 개발 과정에서 간단하게 사용할 수 있습니다. 그러나 프로덕션 환경에서는 실제 SMTP 서버 (Google Apps, qmail, postfix 등이 sysadmin과 대화)를 사용하려고합니다.
clyfe

3
그리고 서버를 다시 시작하는 것을 잊지 마십시오!
매트 본드

10
Devise 2.0은 더 이상 마이그레이션 도우미를 제공하지 않으므로 t.confirmable오류가 발생합니다. 대신 마이그레이션 안내서에서 "Confirmable"이라고 표시된 블록을 복사하십시오. github.com/plataformatec/devise/wiki/…
Ross Allen

1
멋진 튜토리얼 ... 공유해 주셔서 감사합니다. +1 .. 방법 : 추가 : 사용자 확인 페이지를 참조하십시오.
Arup Rakshit

7

다시 편집해야한다고 생각합니다 ... 포트 번호. 따옴표로 묶어야합니다.

:port => "587",

레일 3.2.0 / ruby ​​1.9.2에서 문제가 발생했습니다.


옳은. 또는 "1025"메일 캐처를 사용하는 경우.
에티엔

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.