Rails 3: контактная форма для отправки сообщений из профилей пользователей

Я проработал несколько основных руководств по Rails 3. Целью является сайт сообщества, посвященный способностям и занятиям. Я использую Devise для аутентификации. Создание профилей пользователей с аватарами работало хорошо (спасибо скрепке).

В качестве следующего шага я хочу разрешить зарегистрированным пользователям отправлять электронное письмо пользователю со страницы его (или ее) профиля. Я нашел отличное руководство по созданию контактной формы с помощью Google Apps: http://matharvard.ca/posts/2011/aug/22/contact-form-in-rails-3/

Класс почтовой программы в этом руководстве выглядит так:

class NotificationsMailer < ActionMailer::Base

  default :from => "[email protected]"
  default :to => "[email protected]"

  def new_message(message)
    @message = message
    mail(:subject => "[YourWebsite.tld] #{message.subject}")
  end

end

Мой вопрос: как лучше всего заменить [email protected] на адрес электронной почты получателя? (из пользовательской модели)

Заранее спасибо!


person The_Fritz    schedule 06.01.2012    source источник


Ответы (1)


Вы можете изменить new_message, чтобы принять пользователя (или список пользователей), которому вы хотите отправить электронное письмо. Или массив адресов электронной почты, если хотите. Затем передайте адрес электронной почты получателя методу mail в качестве опции :to.

def new_message(receiver, message)
  @message = message
  mail(:subject => "[YourWebsite.tld] #{message.subject}",
       :to => receiver.email_address) # or something similar
end

Затем вы можете вызвать свою почтовую программу следующим образом

NotificationEmail.new_message(a_user, a_message).deliver

Чтобы ознакомиться с API, см. здесь или здесь (я предпочитаю APIdock).

Также более подробное руководство по ActionMailer доступно здесь. Если вы новичок в Rails, дополнительные руководства можно найти здесь.

person βξhrαng    schedule 06.01.2012
comment
Это отлично работает, спасибо! Чтобы сообщить контроллеру, какому Пользователю он должен отправить сообщение, я добавил скрытое поле в форму сообщения. Например: ‹%= form.hidden_field :user_id, :value =› @user.id %› - person The_Fritz; 09.01.2012
comment
@ user1133942 отлично! Я мало знаю об особенностях вашего приложения, обратите внимание, что злонамеренный пользователь может изменить значение скрытого поля, а затем сообщение может быть отправлено кому-то другому. Итак, если это неприемлемо, вы должны предотвратить это. - person βξhrαng; 09.01.2012
comment
Я использую CanCan для ограничения прав пользователей и разрешаю отправлять электронные письма только вошедшим в систему участникам, поэтому контроллер сообщений предотвратит отправку, если текущий пользователь не имеет необходимых прав. Но я предполагаю, что мне нужно некоторое время иметь дело с Rails, чтобы увидеть все потенциальные угрозы. Спасибо за подсказку! :-) - person The_Fritz; 09.01.2012