Come posso inviare una e-mail di benvenuto quando un utente si registra al mio servizio?Rails 3: Invia e-mail di benvenuto utilizzando Devise
Inoltre, come posso cambiare le e-mail: da e: campo soggetto da Devise?
Grazie
Come posso inviare una e-mail di benvenuto quando un utente si registra al mio servizio?Rails 3: Invia e-mail di benvenuto utilizzando Devise
Inoltre, come posso cambiare le e-mail: da e: campo soggetto da Devise?
Grazie
ho fatto ridefinendo conferma del dispositivo! Metodo: 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
Guardate nel vostro config/devise.rb
È possibile modificare i temi nei vostri file di localizzazione (config/locales/devise.en.yml)
Questa è una grande discussione. Ignorare il metodo come benoror suggerisce funzionerà alla grande. Se pensi di voler catturare altri eventi utente, allora come altri hanno suggerito altrove, una classe Observer potrebbe essere l'approccio più pulito. Questa soluzione è per Rails 3.0.xe 3.1.
Per impostare un osservatore, si apportano le seguenti modifiche al file dell'applicazione, aggiungendo questo osservatore a qualsiasi altro già esistente.
#config/application.rb
config.active_record.observers = :user_observer
quindi creare un nuovo file nella directory modelli:
#app/models/user_observer.rb
class UserObserver < ActiveRecord::Observer
def after_create(user)
Notifier.user_new(user).deliver
end
end
Se si dispone di un test di cetriolo che esercita le funzioni all'utente di creare, è possibile aggiungere questo passaggio per quella caratteristica e copia di backup con una fase di lavoro per verificare la presenza di un'e-mail nell'array di test mail.
#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
Voi ambienti/test.rb dovrebbe avere queste impostazioni per creare un array di posta invece di inviare:
config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
Inutile dire che è possibile testare per molto di più (a, da, ecc) in il messaggio, ma questo ti farà iniziare in modo BDD se sei così propenso.
Vedi anche alcuni thread StackOverflow più anziani con comprensione questa domanda sono:
non posso usare il "approvato" risposta perché non sto usando Devise's: confirmable.
Non mi piacciono le altre soluzioni perché è necessario utilizzare i callback modello, che invieranno sempre e-mail di benvenuto anche quando si crea il proprio account nella console o in un'interfaccia di amministrazione. La mia app implica la possibilità di importare in massa gli utenti da un file CSV. Non voglio che la mia app invii un'email a sorpresa a tutti e 3000 uno per uno, ma voglio che gli utenti che creano il proprio account ricevano un'e-mail di benvenuto. La soluzione:
1) Override controllore iscrizioni di Devise:
#registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def create
super
UserMailer.welcome(resource).deliver unless resource.invalid?
end
end
2) Raccontaci ideare si escludeva il suo controllore iscrizioni:
# routes.rb
devise_for :users, controllers: { registrations: "registrations" }
Naturalmente, è possibile adattare "UserMailer" e " devise_for: users "per abbinare il nome del modello che stai usando.
Per far funzionare questa funzione con Devise per i non utenti, è necessario utilizzare 'resource' invece:' RegistrationsMailer.welcome (resource) .deliver if resource.persisted? ' – indirect
In questa frase, la posta viene inviata anche se la registrazione dell'utente non è completa. –
Non va bene così com'è. L'opzione 'unless @ user.invalid? 'Si assicura che non venga inviata a meno che la registrazione non sia completata. – Arcolye
Cosa succede se non stai utilizzando: confermabile? – Arcolye
Se non lo è: comfirmable, utilizzerei lo stesso metodo, ma lo chiamo: after_create –