рельсы почтовые с разными раскладками - PullRequest
7 голосов
/ 06 сентября 2010

Я использую один макет для всех моих электронных писем в моей модели уведомлений (более 20 электронных писем) ... однако иногда я просто хочу отправить текстовое электронное письмо без макета или HTML вообще. Кажется, я не могу понять, как? Если я пытаюсь отправить текстовое электронное письмо, я все равно получаю макет и весь HTML-код в электронном письме.

Я использую Rails 2.3.8.

Я читал об этом патче обезьяны здесь ... но, похоже, это указывало на то, что пришла более новая версия rails? И я действительно не хочу обезьяньего патча, если смогу его избежать.

Rails - настройка нескольких макетов для составной электронной почты с шаблонами рассылки

  layout "email" # use email.text.(html|plain).erb as the layout


  def welcome_email(property)
    subject    'New Signup'
    recipients property.email
    from       'welcome@test.com'
    body       :property => property
    content_type "text/html"
  end

  def send_inquiry(inquire)
    subject    "#{inquire.the_subject}"
    recipients inquire.ob.email
    from       "Test on behalf of #{inquire.name} <#{inquire.email}>"
    body       :inquire => inquire
    content_type "text/plain"

  end

У меня также есть 2 файла.

email.text.html.erb
email.text.plain.erb

Он всегда использует text.html.erb ... даже если для content_type указано "text / plain"

Ответы [ 3 ]

9 голосов
/ 14 сентября 2010

edit: понял, макеты следуют схеме именования, отличной от шаблонов электронной почты. Просто переименуйте их следующим образом:

layout.text.html.erb    => layout.html.erb
layout.text.plain.erb   => layout.text.erb

Я также допустил ошибку при определении частей вручную, если вы используете это:

part :content_type => 'text/plain',
     :body => render_message('my_template')

Тогда Rails не может определить content_type для вашей части и предполагает, что это HTML.

После того, как я изменил эти две вещи, это сработало для меня!

следует оригинальный ответ ..


В прошлом я много раз сталкивался с этим вопросом, обычно заканчивая каким-то не сухим быстрым и грязным раствором. Я всегда думал, что я единственный, кто столкнулся с этой проблемой, потому что Google не нашел ничего полезного по этому вопросу.

На этот раз я решил покопаться в Rails, чтобы выяснить это, но пока без особого успеха, но, возможно, мои выводы помогут кому-то еще понять это.

Я обнаружил, что в ActionMailer :: Base методу #render_message поручено определить правильный content_type и назначить его @current_template_content_type. #default_template_format затем либо возвращает правильный тип MIME для макета, либо, если @current_template_content_type не установлен, по умолчанию он будет: html.

Вот как ActionMailer :: Base # render_message выглядит в моем приложении (2.3.5)

  def render_message(method_name, body)
    if method_name.respond_to?(:content_type)
      @current_template_content_type = method_name.content_type
    end
    render :file => method_name, :body => body
  ensure
    @current_template_content_type = nil
  end

Беда в том, что method_name представляется строкой (имя локального представления, в моем случае «new_password.text.html»), и строки, конечно, не answer_to #content_type, что означает, что @current_template_content_type всегда будет оставаться нулевым, и поэтому #default_template_format всегда будет по умолчанию: html.

Не намного ближе к реальному решению, я знаю. Внутренние элементы ActionMailer слишком непрозрачны для меня.

5 голосов
/ 10 сентября 2010

ОК, не уверен, что это работает, но кажется, что по умолчанию content_type - это text / plain, поэтому вам нужно будет только установить тип содержимого, если вы хотите что-то отличное от text / plain.

Попробуйте это:

def send_inquiry(inquire)
  subject    "#{inquire.the_subject}"
  recipients inquire.ob.email
  from       "Test on behalf of #{inquire.name} <#{inquire.email}>"
  body       :inquire => inquire
end

Я все еще думаю, что вы должны рассмотреть это:

layout "email", :except => [:send_inquiry]

Я бы использовал выше, потому что электронное письмо в обычном тексте, кажется, не«макет», только фактический контент, который вы хотите отправить.

0 голосов
/ 24 мая 2012

Я обнаружил, что это может быть полезно.

http://blog.blazingcloud.net/2009/11/17/simple-email-form-with-actionmailer/

Он использует переименование шаблонов представления для разных типов контента.

...