Rails 3并设计转义邮件模板

时间:2011-01-25 12:30:59

标签: ruby-on-rails ruby-on-rails-3 escaping devise actionmailer

我正在使用rails 3并设计用于身份验证。

将我的邮件程序模板翻译成除了设计默认值之外的任何内容都会导致html转义。这样做的一个特殊后果是确认新帐户电子邮件包含无效的确认令牌。

<p><a href=3D"http://localhost:3000/users/confirmation?confirmation_token=
=3D88uo7jetcetc">Confirma=
r mi cuenta</a></p>

前面的3d是html转义,不应该在那里。使用raw和html_safe对输出没有影响。

4 个答案:

答案 0 :(得分:4)

请注意,此效果有时仅出现在控制台中,在生产中和/或实际发送的电子邮件中不存在。这就是我的情况;它与非英文字符无关,但确实创造了&#34; 3D&#34;和&#34; = 3D&#34;在我修改确认电子邮件之后,上面提到的插入 - 但仅在控制台输出中 - 使测试复杂化。

在Devise Github上看到这个问题: http://github.com/plataformatec/devise/issues/2086 ......它被归结为&#34; Rails问题。&#34;

如果有人知道打开的机票,我希望看到这个打补丁,因为它会为许多其他第一次遇到它的开发人员节省很多时间,并简化所有人的测试。

答案 1 :(得分:3)

好的,如果有人遇到这个,这就是我如何解决它。

如果邮件程序模板包含任何非英文字符,则整个模板都会被转义。似乎没有办法解决这个问题,除了在rails之前逃避所有这些字符。

例如:

%p
    = "!Bienvenido, #{username}!"

%p
    Usted puede confirmar su cuenta a través del siguiente enlace:

%p
    = link_to 'Confirmar mi cuenta', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token.html_safe)

需要

%p
    = "&#161;Bienvenido, #{username}!"

%p
    Usted puede confirmar su cuenta a trav&eacute;s del siguiente enlace:

%p
    = link_to 'Confirmar mi cuenta', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token.html_safe)

答案 2 :(得分:0)

我也有这个问题。我使用rails html_safe方法时link_to工作了。

错误代码

%a{:href => "#{@redemption.link.html_safe}"}= "http://example.com/#{@redemption.model.email_hash}"

好的代码

= link_to "http://example.com/#{@redemption.model.email_hash}", @redemption.link.html_safe

答案 3 :(得分:0)

我可以确认我收到了这样的电子邮件(使用预先录制的3D)在控制台,但不在真正的已发送邮件中。所以,不需要逃避任何事情。

但是,出于测试目的,您可以添加以下代码,仅在开发模式下在控制台中显示电子邮件:

<% if Rails.env.development?  %>
    <% logger.debug confirmation_url(@resource, confirmation_token: @token) %>
<% end %>