Wie kann ich eine Willkommens-E-Mail senden, wenn sich ein Benutzer bei meinem Dienst anmeldet?Rails 3: Senden Sie eine Willkommens-E-Mail mit Devise
Auch, wie ändere ich die E-Mails: von und: Betreff Feld von Devise?
Dank
Wie kann ich eine Willkommens-E-Mail senden, wenn sich ein Benutzer bei meinem Dienst anmeldet?Rails 3: Senden Sie eine Willkommens-E-Mail mit Devise
Auch, wie ändere ich die E-Mails: von und: Betreff Feld von Devise?
Dank
ändern kann ich es tat durch zwingende zeugen bestätigen! methode: 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
Schauen Sie in Ihre config/devise.rb
Sie die Themen in Ihrem lokalen Dateien (config/locales/devise.en.yml)
Dies ist eine großartige Diskussion. Das Überschreiben der Methode, wie es Benoror vorschlägt, wird großartig funktionieren. Wenn Sie der Meinung sind, dass Sie andere Benutzerereignisse erfassen möchten, könnte eine Observer-Klasse, wie einige andere an anderer Stelle vorgeschlagen haben, der sauberste Ansatz sein. Diese Lösung ist für Rails 3.0.x und 3.1.
Um einen Beobachter einzurichten, nehmen Sie die folgenden Änderungen an Ihrer Anwendungsdatei vor und fügen diesen Beobachter zu allen anderen hinzu, die Sie möglicherweise bereits haben.
#config/application.rb
config.active_record.observers = :user_observer
Dann eine neue Datei im Verzeichnis Modelle erstellen:
#app/models/user_observer.rb
class UserObserver < ActiveRecord::Observer
def after_create(user)
Notifier.user_new(user).deliver
end
end
Wenn Sie eine Gurke Test haben, dass die Benutzer Funktionen erstellen Übungen, können Sie diesen Schritt zu diesem Feature hinzufügen und sie sichern mit ein Worker-Schritt, um nach einer E-Mail im Test-Mail-Array zu suchen.
#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
Sie Umgebungen/test.rb sollten diese Einstellungen müssen eine E-Mail-Array aufzubauen statt zu senden:
config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
Unnötig zu sagen, dass Sie viel mehr testen können (auf, ab, usw.) in die Nachricht, aber dies wird Sie in einer BDD-Art starten, wenn Sie so geneigt sind.
Siehe auch einige ältere Stackoverflow-Threads mit Einblick in diese Frage sind:
ich nicht die „genehmigt“ verwenden können, Antwort, weil ich nicht bin mit Devise's: Bestätigbar.
Ich mochte die anderen Lösungen nicht, weil Sie Modell-Callbacks verwenden müssen, die immer Begrüßungs-E-Mails senden, auch wenn Sie sein Konto in der Konsole oder einer Admin-Oberfläche erstellen. Meine App beinhaltet die Möglichkeit, Benutzer aus einer CSV-Datei massenweise zu importieren. Ich möchte nicht, dass meine App eine Überraschungs-E-Mail an alle 3000 von ihnen eins nach dem anderen sendet, aber ich möchte, dass Nutzer, die ihr eigenes Konto erstellen, eine Willkommens-E-Mail erhalten. Die Lösung:
1) außer Kraft setzen Devise des Registrations-Controller:
#registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def create
super
UserMailer.welcome(resource).deliver unless resource.invalid?
end
end
2) Sagen Sie Entwickeln Sie ihre Anmeldungen Controller overrode:
# routes.rb
devise_for :users, controllers: { registrations: "registrations" }
Natürlich können Sie "UserMailer" anpassen und " devise_for: users "mit dem von Ihnen verwendeten Modellnamen übereinstimmen.
Um dies mit Devise für Nicht-Benutzer zu verwenden, müssen Sie stattdessen 'resource' verwenden:' RegistrationsMailer.welcome (resource) .deliver if resource.persisted? ' – indirect
In diesem Satz wird die Mail gesendet, auch wenn die Benutzerregistrierung nicht abgeschlossen ist. –
Nein, das ist in Ordnung, wie es ist. Die Option 'unless @ user.invalid?' Stellt sicher, dass sie erst gesendet wird, wenn die Registrierung abgeschlossen ist. – Arcolye
Was ist, wenn Sie nicht verwenden: bestätigbar? – Arcolye
Wenn nicht: compfirmable, würde ich die gleiche Methode verwenden, aber rufen Sie es auf: after_create –