¿Cómo configuro el correo electrónico de confirmación con Devise?

127

¿Existe un tutorial que explique cómo configurar el correo electrónico de confirmación de registro de Devise desde cero (tanto en desarrollo como en producción), es decir, si no tiene configurado Action Mailer?

La búsqueda en Google acaba de aparecer un montón de piezas separadas relacionadas con esto. Ninguna pieza explica lo suficiente, y no estoy seguro de cómo encajan. ¿Existe una explicación paso a paso, o incluso algo que explique los pasos iniciales?


Finalmente lo puse a trabajar. Seguí todos los pasos en la respuesta aceptada a continuación, luego agregué lo siguiente a mi archivo 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
fuente

Respuestas:

208

1. Asegúrese de incluir confirmable en la llamada Model.devise

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

2. Asegúrese de agregar confirmable a la migración del usuario

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

Si está utilizando devise 2.0+, esto falla porque idear ya no proporciona ayuda para la migración y, por lo tanto, t.confirmablegenera un error. En su lugar, copie el bloque etiquetado como "Confirmable" de su guía de migración .

3. Genere las vistas de diseño, con cualquiera de los siguientes comandos, para que pueda anular las vistas de diseño de correo:

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

Ahora puede anular las vistas de envío de correos en devise/mailer/confirmation_instructions.html.erbo users/mailer/confirmation_instructions.html.erbsegún su configuración

4. Para el entorno de desarrollo , agregue las siguientes líneas de configuración en/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 el entorno de producción/config/environments/production.rb , puede usar algo similar a lo siguiente (suponiendo que tenga un servidor SMTP en localhost: 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 probar la configuración en desarrollo, instale la gema mailcatcher, que usará como servidor SMTP en desarrollo, capturando todos los correos entrantes y mostrándolos en http://localhost:1080/:

gem install mailcatcher

Una vez instalado, inicie el servidor mailcatcher con el comando:

mailcatcher

Se ejecutará un servidor SMTP de juguete en el puerto 1025 para capturar correos electrónicos y desplazarlos en el puerto HTTP 1080.

Ahora puede crear una cuenta y ver las confirmaciones.

Clyfe
fuente
Wow, gracias por esa respuesta increíblemente completa. Lo tengo funcionando de tal manera que el receptor de correo está captando los correos electrónicos, pero en realidad no aparece ningún correo electrónico en mi bandeja de entrada. Probé dos direcciones de correo electrónico diferentes y verifiqué las carpetas de spam en ambas. ¿Hay algo que pueda estar perdiendo aquí? (Estoy en modo de desarrollo).
jyli7
1
En el desarrollo, no es necesario que entregue los correos electrónicos a la dirección. Mailcatcher tiene una interfaz web en localhost: 1080 que puede abrir y ver los correos electrónicos capturados; de eso se trata, para que sea más sencillo para usted en el desarrollo. Sin embargo, en producción, desea utilizar un servidor SMTP real (Google Apps, qmail, postfix, etc., hable con su administrador de sistemas)
clyfe
3
¡Y no olvides reiniciar tu servidor!
Matt Bond
10
Devise 2.0 ya no proporciona ayuda de migración, por lo que t.confirmablegenera un error. En su lugar, copie el bloque etiquetado "Confirmable" de su guía de migración: github.com/plataformatec/devise/wiki/…
Ross Allen
1
Impresionante tutorial ... gracias por compartir ... +1 .. También vale la pena ver Cómo: Agregar: confirmable a la página de usuarios .
Arup Rakshit
7

Creo que deberías editarlo una vez más ... puerto no. debe estar entre comillas. Así: -

:port => "587",

Me enfrenté a un problema en los rieles 3.2.0 / ruby ​​1.9.2


fuente
Correcto. O "1025"si usa mailcatcher.
Etienne