2013-06-08 2 views
3

Я использую Devise в приложении Rails 3 для создания учетных записей. У меня разные типы пользователей, поэтому я хочу отправить электронные письма с восстановлением пароля на основе типа пользователя.Как настроить пользовательский объект электронной почты в настраиваемом электронном письме?

Я могу отправить пользовательскую электронную почту, я не нашел способ установить пользовательские заголовки на этом электронном письме. Я особенно заинтересован в настройке темы письма.

Я сделал следующее:

  • создал пользовательский Придумайте почтовик с настраиваемым способом внутри. Этот метод вызывает devise_mail с параметрами. В этом случае пользовательская почтовая программа называется «reset_partner_instructions». Я могу позвонить этой почтовой программе и успешно отправить электронное письмо с моей модели пользователя.
  • Создан собственный шаблон просмотра электронной почты, который успешно вызывается с devise_mail.

Мой заказ почтовик выглядит следующим образом:

class AccountMailer < Devise::Mailer 
    helper :application # gives access to all helpers defined within application_helper. 
    def reset_partner_instructions(record, opts={}) 
    devise_mail(record, :reset_partner_instructions, opts) 
    end 
end 

Проблема заключается в том, что тема письма всегда «Сбросить инструкции партнера». Я считаю, что Devise генерирует этот заголовок из имени почтового шаблона.

В этом учебнике https://github.com/plataformatec/devise/wiki/How-To:-Use-custom-mailer, они называют следующий код:

def confirmation_instructions(record, opts={}) 
    headers["Custom-header"] = "Bar" 
    super 
end 

Поскольку я звоню «devise_mail» напрямую, я не вижу, как передать заголовки intoto почтовой программы. Есть ли простая настройка или метод, который я могу использовать для настройки темы электронной почты?

ответ

12

См devise helper

class AccountMailer < Devise::Mailer 


    def confirmation_instructions(record, opts={}) 
    headers = { 
     :subject => "Subject Here" 
    } 
    super 
    end 

end 

Или вы можете изменить его в devise.en.yml файл в каталоге intilizer

И установить свой собственный предмет

mailer: 
    confirmation_instructions: 
     subject: 'Confirmation instructions' 
+0

Спасибо за вашу помощь! Я закончил создание пользовательской почтовой программы. Я чувствовал, что это было гораздо более чистое решение, и мне не пришлось переоценивать то, что делал Девиз. – Omar

+0

Но как передать переменную в Locale? Например, я хочу использовать первое имя в теме. –

+0

@AmmarShah посмотреть [здесь] (https://stackoverflow.com/a/13954066/1297435) –

0

я понял, что я должен просто использовать ActionMailer для решения этой задачи , Devise не предоставлял мне дополнительных функций, и поскольку я пытался создать пользовательскую почтовую программу, я мог бы сделать это вне Devise.

-1

Нет необходимости настраивать пользовательскую почтовую программу или переопределять метод Devision confirmation_instructions.

Разрабатывают позволяет вам пройти в необязательных параметров к методу confirmation_instructions, которые будут получать сливались с параметрами DEViSE по умолчанию (opts хэш получает передается через headers_for помощника DEViSE в).

Таким образом, вы можете использовать следующий код для отправки инструкции подтверждения с пользовательской темой:

Devise::Mailer.confirmation_instructions(user, {subject: "Custom Subject"}).deliver 
+0

Когда я использую ваше решение, оно вообще не работает, когда я устанавливаю # template_path: "/ app/views/shared/users/mailer ", # template_name:" mytest.html.erb " , rails выбрасывает эту ошибку: отсутствует шаблон /app/views/shared/users/mailer/mytest.html.erb с" почтой ". Поиск: * "/ приложение/просмотры/общие/пользователи/почтовая программа". Хотя файл уже есть. – datnt

2

Это очень старый вопрос, это может быть полезно еще для вас другие,

для пользовательской темы :

  1. создать файл конфигурации /локали/devise.en.yml
  2. добавьте содержимое, подобное этому, как показано ниже, убедитесь, что вы правильно отпечатали с двумя пробелами, как в файле database.yml.

    en: devise: mailer: confirmation_instructions: subject: 'Verification subject here' reset_password_instructions: subject: 'Reset password subject here'

Смежные вопросы