2010-12-29 18 views
10

ユーザーが自分のサービスに登録したときに歓迎電子メールを送信するにはどうすればよいですか?Rails 3:Deviseを使用して歓迎電子メールを送信

また、電子メールを変更するにはどうすればいいですか:from:とSubject:フィールドはDeviseから変更できますか?あなたのconfig/devise.rb

おかげ

答えて

16

私はオーバーライドすることでそれをやりました念入りにする!方法: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 
+7

あなたが使用していない場合はどうすればいいですか:確認できますか? – Arcolye

+2

それが妥当でない場合は、私は同じ方法を使用しますが、それを呼び出してみましょう:after_create –

1

ルックあなたのロケールファイルの被験者を変更することができます(設定/ロケール/ devise.en.yml)

5

これは素晴らしい議論です。 benororが提案するメソッドをオーバーライドすると素晴らしい結果が得られます。他のユーザーイベントをキャプチャしたいと思う場合は、Observerクラスが他の場所で提案しているように、最もクリーンな方法かもしれません。このソリューションは、Rails 3.0.xおよび3.1向けです。

オブザーバーをセットアップするには、アプリケーションファイルを次のように変更し、このオブザーバーを既に他のものに追加します。

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

そして、モデルのディレクトリに新しいファイルを作成します。作成したユーザーの機能を行使するキュウリのテストを持っている場合は、その機能には、この手順を追加し、それをバックアップすることができ

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

をテストメール配列内の電子メールをチェックするワーカーステップ。

#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 

あなたの環境送るのではなく、メールのアレイを構築するために、これらの設定を持つ必要があります/ test.rb:(など、からの、)

あなたがはるかにためにテストすることができ言うまでもなく
config.action_mailer.delivery_method = :test 
config.action_mailer.perform_deliveries = true 

でメッセージが表示されますが、そういう場合はBDD方式で開始されます。

も参照してくださいこの質問への洞察力を持つ一部の古いStackOverflowのスレッドが含まれます:

20

を私は使用していないので、答えは「承認」を使用することはできませんDevise's:確認可能。

モデルコールバックを使用する必要があるため、コンソールや管理インターフェイスで自分のアカウントを作成してもウェルカム電子メールを送信する必要があるため、他のソリューションは嫌いでした。私のアプリには、CSVファイルからユーザーを一括インポートする機能があります。私は、自分のアプリが3000人すべてに驚きのメールを1つずつ送って欲しいとは思っていませんが、自分のアカウントを作成したユーザーに歓迎メールを送りたいと思っています。 ソリューション:

1)が考案者の登録コントローラーオーバーライド:

#registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 

    def create 
    super 
    UserMailer.welcome(resource).deliver unless resource.invalid? 
    end 

end 

2)あなたを考案知らせるその登録コントローラオーバーライド:もちろん

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

を、あなたは "UserMailer" を適応させることができ、 " devise_for:users "を使用しているモデル名と一致させる必要があります。

+1

これを非ユーザ向けに使用するには、代わりに 'resource'を使用する必要があります:' RegistrationsMailer.welcome(resource).deliver if resource.persisted? ' – indirect

+0

この文では、ユーザー登録が完了していなくてもメールが送信されます。 –

+2

いいえ、これはそのままです。 'unless @ user.invalid? 'は、登録が完了していなければ送信されないことを確認します。 – Arcolye

関連する問題