Rails 3: отправьте приветственное письмо с помощью Devise - PullRequest
10 голосов
/ 29 декабря 2010

Как я могу отправить приветственное электронное письмо, когда пользователь регистрируется на моем сервисе?

Кроме того, как мне изменить адреса электронной почты: от и: тема от Devise?

Спасибо

Ответы [ 4 ]

20 голосов
/ 22 февраля 2013

Я не могу использовать «одобренный» ответ, потому что я не использую Devise: подтверждаемый.

Мне не понравились другие решения, потому что вы должны использовать модельные обратные вызовы, которые всегда будут отправлять приветственные письма, даже когда вы создаете его учетную запись в консоли или интерфейсе администратора. Мое приложение включает в себя возможность массового импорта пользователей из файла CSV. Я не хочу, чтобы мое приложение отправляло неожиданное электронное письмо всем 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» для соответствия названию модели, которую вы используете.

16 голосов
/ 26 мая 2011

Я сделал это, переопределив подтверждение устройства! метод: 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
5 голосов
/ 05 сентября 2011

Это отличная дискуссия. Переопределение метода, как предлагает Бенор, будет прекрасно работать. Если вы думаете, что хотите захватить другие пользовательские события, то, как некоторые другие предложили в другом месте, класс 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 == ["no-reply@example.com"]
end

В вашей среде / test.rb должны быть установлены следующие параметры для создания почтового массива вместо отправки:

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

Само собой разумеется, что вы можете проверить в сообщении гораздо больше (от, до и т. Д.), Но это поможет вам начать BDD, если вы так склонны.

См. Также некоторые более старые темы StackOverflow, в которых есть понимание этого вопроса:

1 голос
/ 29 декабря 2010

Загляните в свой config / devise.rb

Вы можете изменить темы в ваших файлах локалей (config / locales / devise.en.yml)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...