Rails 3:使用Devise发送欢迎电子邮件

当用户注册我的服务时,如何发送欢迎电子邮件?

另外,如何更改电子邮件:来自Devise的from和:subject字段?

谢谢

我是通过覆盖设计的确认来做到的! 方法: 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 

我不能使用“已批准”的答案,因为我没有使用Devise的:确认。

我不喜欢其他解决方案,因为你必须使用模型回调,即使你在控制台或管理界面中创建他的帐户,也会发送欢迎电子邮件。 我的应用程序涉及从CSV文件批量导入用户的function。 我不希望我的应用程序逐个向所有3000个用户发送惊喜邮件,但我确实希望创建自己帐户的用户收到欢迎电子邮件。 解决方案:

1)覆盖Devise的注册控制器:

 #registrations_controller.rb class RegistrationsController < Devise::RegistrationsController def create super UserMailer.welcome(resource).deliver unless resource.invalid? end end 

2)告诉Devise你覆盖其注册控制器:

 # routes.rb devise_for :users, controllers: { registrations: "registrations" } 

当然,您可以调整“UserMailer”和“devise_for:users”以匹配您正在使用的型号名称。

这是一个很好的讨论。 覆盖benoror建议的方法会很有效。 如果您认为您可能想要捕获其他用户事件,那么正如其他人在其他地方建议的那样,Observer类可能是最干净的方法。 此解决方案适用于Rails 3.0.x和3.1。

要设置观察者,请对应用程序文件进行以下更改,将此观察者添加到您可能已有的任何其他人。

 #config/application.rb config.active_record.observers = :user_observer 

然后在models目录中创建一个新文件:

 #app/models/user_observer.rb class UserObserver < ActiveRecord::Observer def after_create(user) Notifier.user_new(user).deliver end end 

如果您有执行创建用户function的黄瓜测试,则可以将此步骤添加到该function,并使用工作步骤对其进行备份,以检查测试邮件arrays中的电子邮件。

 #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 == ["no-reply@example.com"] end 

您的环境/ test.rb应具有这些设置来构建邮件arrays而不是发送:

 config.action_mailer.delivery_method = :test config.action_mailer.perform_deliveries = true 

毋庸置疑,您可以在消息中测试更多(来自,来自等),但如果您愿意,这将使您以BDD方式开始。

另请参阅一些较旧的StackOverflow线程,深入了解此问题包括:

  • 如何使用Devise向Rails中的新注册用户发送欢迎电子邮件?
  • 使用Rails和Devise,我想在注册时发送欢迎电子邮件。

查看你的config / devise.rb

您可以更改语言环境文件中的主题(config / locales / devise.en.yml)