Como configuro a confirmação por email com o Devise?

127

Existe um tutorial por aí que explica como configurar o email de confirmação de inscrição do Devise do zero (tanto no desenvolvimento quanto na produção), ou seja, se você não tiver o Action Mailer configurado?

A pesquisa no Google acabou de encontrar várias peças separadas relacionadas a isso. Ninguém explica o suficiente, e não tenho certeza de como eles se encaixam. Existe uma explicação passo a passo por aí, ou mesmo algo que explica os passos iniciais?


Finalmente consegui funcionar. Siga todas as etapas da resposta aceita abaixo e adicione o seguinte ao meu arquivo 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]"
 }
jyli7
fonte

Respostas:

208

1. Certifique-se de incluir confirmavel na chamada Model.devise

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

2. Certifique-se de adicionar confirmado à migração do usuário

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

Se você estiver usando o devise 2.0+, isso falhará, pois o devise não fornece mais ajudantes de migração e, portanto, t.confirmablegera um erro. Em vez disso, copie o bloco rotulado "Confirmável" no guia de migração .

3. Gere as visualizações planejadas, com um dos seguintes comandos, para que você possa substituir as visualizações planejadas do mailer:

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

Agora você pode substituir as visualizações da mala direta devise/mailer/confirmation_instructions.html.erbou users/mailer/confirmation_instructions.html.erbdependendo da sua configuração

4. Para o ambiente de desenvolvimento , adicione as seguintes linhas de configuração em/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. Para o ambiente de produção , /config/environments/production.rbvocê pode usar algo semelhante ao seguinte (supondo que você tenha um servidor SMTP no host local: 25):

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 Para testar a configuração em desenvolvimento, instale o gem do mailcatcher, que você usará como servidor SMTP em desenvolvimento, capturando todos os emails recebidos e exibindo-os em http://localhost:1080/:

gem install mailcatcher

Depois de instalado, inicie o servidor do mailcatcher com o comando:

mailcatcher

Um servidor SMTP de brinquedo estará executando na porta 1025, capturando e-mails e exibindo-os na porta HTTP 1080.

Agora você pode criar uma conta e ver as confirmações.

clyfe
fonte
Uau, obrigado por essa resposta incrivelmente abrangente. Estou trabalhando de tal maneira que o apanhador de e-mail está capturando os e-mails, mas nenhum e-mail realmente aparece na minha caixa de entrada. Eu tentei dois endereços de email diferentes e verifiquei as pastas de spam em ambos. Há algo que eu possa estar perdendo aqui? (Estou no modo de desenvolvimento).
jyli7
1
No desenvolvimento, você não precisa realmente entregar os emails no endereço. O Mailcatcher possui uma interface da web no host local: 1080 que você pode abrir e ver os e-mails capturados - esse é o objetivo disso, para simplificar o desenvolvimento para você. Na produção no entanto, que pretende utilizar um servidor real SMTP (Google Apps, qmail, falar postfix etc para o seu sysadmin)
clyfe
3
E não se esqueça de reiniciar o servidor!
Matt bond
10
O Devise 2.0 não fornece mais ajudantes de migração e, portanto, t.confirmablegera um erro. Em vez disso, copie o bloco identificado como "confirmável" de seu guia de migração: github.com/plataformatec/devise/wiki/...
Ross Allen
1
Tutorial incrível ... obrigado por compartilhar .. +1 .. Também vale a pena ver Como: Adicionar: confirmado à página Usuários .
Arup Rakshit
7

Eu acredito que você deveria editá-lo mais uma vez ... port no. deve estar entre aspas. Assim: -

:port => "587",

Eu enfrentei um problema no Rails 3.2.0 / ruby ​​1.9.2


fonte
Corrigir. Ou "1025"se estiver usando o mailcatcher.
Etienne