ruby-on-rails - signup - devise wiki
Rails 3: envíe un correo electrónico de bienvenida con Devise (4)
Mira en tu config / devise.rb
Puede cambiar los temas en sus archivos locales (config / locales / devise.en.yml)
¿Cómo puedo enviar un correo electrónico de bienvenida cuando un usuario se registra en mi servicio?
Además, ¿cómo puedo cambiar los correos electrónicos desde y desde el campo Asunto de Devise?
Gracias
¡Lo hice anulando la confirmación del inventor! método: https://gist.github.com/982181
class User < ActiveRecord::Base
devise :invitable, :database_authenticatable, :registerable, :recoverable,
:rememberable, :confirmable, :validatable, :encryptable
# ...
# devise confirm! method overriden
def confirm!
welcome_message
super
end
# ...
private
def welcome_message
UserMailer.welcome_message(self).deliver
end
end
No puedo usar la respuesta "aprobada" porque no estoy usando Devise''s: confirmable.
No me gustaron las otras soluciones porque tienes que usar devoluciones de llamada modelo, que siempre enviarán correos electrónicos de bienvenida incluso cuando crees su cuenta en la consola o en una interfaz de administrador. Mi aplicación implica la capacidad de importar en masa usuarios desde un archivo CSV. No quiero que mi aplicación envíe un correo electrónico sorpresa a todos los 3000 de uno en uno, pero sí quiero que los usuarios que crean su propia cuenta reciban un correo electrónico de bienvenida. La solución:
1) Anular el controlador de registros de Devise:
#registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def create
super
UserMailer.welcome(resource).deliver unless resource.invalid?
end
end
2) Decirle idear que anula su controlador de Registros:
# routes.rb
devise_for :users, controllers: { registrations: "registrations" }
Por supuesto, puede adaptar "UserMailer" y "devise_for: users" para que coincida con el nombre del modelo que está utilizando.
Esta es una gran discusión. Anular el método como lo sugiere Benoror funcionará muy bien. Si crees que podrías querer capturar otros eventos de usuario, entonces, como otros han sugerido en otra parte, una clase de observador podría ser el enfoque más limpio. Esta solución es para Rails 3.0.x y 3.1.
Para configurar un observador, realice los siguientes cambios en su archivo de aplicación, agregando este observador a cualquier otro que ya tenga.
#config/application.rb
config.active_record.observers = :user_observer
Luego crea un nuevo archivo en el directorio de modelos:
#app/models/user_observer.rb
class UserObserver < ActiveRecord::Observer
def after_create(user)
Notifier.user_new(user).deliver
end
end
Si tiene una prueba de pepino que ejercita las funciones de crear usuario, puede agregar este paso a esa característica y hacer una copia de seguridad con un paso de trabajador para verificar si hay un correo electrónico en la matriz de correo de prueba.
#features/users/sign_up.feature for example
Scenario: User signs up with valid data
...
And I should receive an email with "[Text from your welcome message]"
#features/common_steps.rb
Then /^I should receive an email with "([^"]*)"$/ do |value|
# this will get the most recent email, so we can check the email headers and body.
ActionMailer::Base.deliveries.should_not be_empty
@email = ActionMailer::Base.deliveries.last
@email.body.should include(value)
#@email.from.should == ["[email protected]"]
end
Sus entornos / test.rb deberían tener estas configuraciones para construir una matriz de correo en lugar de enviar:
config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
No hace falta decir que puede probar mucho más (desde, desde, etc.) en el mensaje, pero esto le permitirá iniciarse de una manera BDD si así lo desea.
Vea también algunos hilos antiguos de con información sobre esta pregunta, que incluyen: