6

ActionMailerプレーンテキストのメールを送信するためにrails3.2.5を使用しています。私がこのようなメールビューを持っているとすると:

message_from_user.text.erb

Hi <%= @recipient.name %>,

You got the following message from <%= @sender.name %>:

<%= @message %>

@messageの場合"quotes & ampersands"、プレーンテキストメールには。が含まれます&quot;quotes &amp; ampersands&quot;。したがって、RailsはこれをHTMLビューとして扱い、クロスサイトスクリプティングを防ぐためにHTMLをエスケープしているようです。ただし、これはプレーンテキストのメールです。拡張子は.text.erbであり、ActionMailerこれを検出し、MIMEをに設定しtext/plainます。そのため、HTMLをエスケープしたくありません。

私のアプリケーションにはかなりの数のメールテンプレートがあり、それらはすべてプレーンテキストです。私はそれらすべてにパッチを当てて、スタイルを含める<%=raw @message%><%= @message.html_safe %>悪いものにすることを検討します-あまりドライではありません。

Erubisにパッチを適用するお金を含むvariosの回避策を試しました。それらのどれも機能していないようです。すべてのファイルのHTMLのエスケープを無効にするパッチや構成オプションなどを探してい.text.erbます。

どんな助けでも大歓迎です!

4

2 に答える 2

8

Erubisコードを数時間デバッグした後、次の修正が見つかりました。に入れるだけconfig/initializers/fix_my_mails.rbです。私はこれをrails3.2.7でテストしました。他のバージョンでも動作する可能性があります。

module ActionView
  class Template
    module Handlers
      class ERB
        def call(template)
          if template.source.encoding_aware?
            # First, convert to BINARY, so in case the encoding is
            # wrong, we can still find an encoding tag
            # (<%# encoding %>) inside the String using a regular
            # expression
            template_source = template.source.dup.force_encoding("BINARY")

            erb = template_source.gsub(ENCODING_TAG, '')
            encoding = $2

            erb.force_encoding valid_encoding(template.source.dup, encoding)

            # Always make sure we return a String in the default_internal
            erb.encode!
          else
            erb = template.source.dup
          end

          self.class.erb_implementation.new(
            erb,
            :trim => (self.class.erb_trim_mode == "-"),
            :escape => template.identifier =~ /\.text/ # only escape HTML templates
          ).src
        end
      end
    end
  end
end

ファイル名に含まれるすべてのerbファイルのHTMLエンティティを無効にするだけ.textです。

于 2012-08-01T16:04:32.887 に答える
7

試す

<%= @message.html_safe %>

検索機能を使用したことがあれば、この答えを見つけることができます。それがあなたのニーズに合わない場合は、多分チェックしてください

https://rails.lighthouseapp.com/projects/8994/tickets/4858-actionmailer-is-html-escaping-ampersand-in-urls-in-plain-text-messages

まだご覧になっていない場合は、いくつかのオプションについて説明しています。

于 2012-08-01T09:32:54.400 に答える