如何使用ActionMailer发送HTML电子邮件?

时间:2012-04-24 13:59:11

标签: ruby-on-rails ruby actionmailer

使用rails 2.3.14

我的电子邮件erb: data.html.erb:

<% @data.each do |error| %>
    <table>
        <% error.each_pair do |k, v| %>
            <tr>
                <td>
                    <%= k %>
                </td>
                <td>
                    <%= ap v %>
                </td>
            </tr>   
        <% end %>
    </table>
    <br />
<% end %>

我可以收到电子邮件,但是当我这样做时,它会显示为纯文本 - 而不是呈现HTML。

Action Mailer config:

config.action_mailer.raise_delivery_errors = true

# Send emails during development
config.action_mailer.perform_deliveries = true
ActionMailer::Base.delivery_method = :sendmail

更新:必须在我的投放方式中指定内容类型:

 def data(data, sent_at = Time.now)
    Time.zone = 'Eastern Time (US & Canada)'

    content_type 'text/html'
    subject     "[#{RAILS_ENV}] An error has occurred - #{Time.now.to_s("%B %d, %Y")}"
    recipients  "bugs@mydomain.com"
    from        AppConfig['from_email']
    sent_on     sent_at
    @body   =   {:data => data}
  end

3 个答案:

答案 0 :(得分:1)

在某些情况下,似乎rails可能以某种方式缓存文本模板。

我只是

  1. 使用单一视图生成新邮件,文本视图
  2. 测试邮件并发送短信
  3. 将文本电子邮件重命名为html(foo.text.haml - &gt; foo.html.haml)
  4. 重新测试邮件...并收到短信(嘘!)
  5. 使用新名称(bar.html.haml)
  6. 在文本版本旁边创建了HTML版本
  7. 重新启动服务器
  8. 重新测试(发送栏)。这次有一封HTML电子邮件。
  9. 重新测试了原始的html电子邮件(foo)。获得了HTML电子邮件
  10. 克雷。

答案 1 :(得分:0)

使用&lt;%=原始k%&gt;或&lt;%= k.html_safe%&gt;

答案 2 :(得分:0)

来自d11wtq的comment

content_type指定为text/html

ActionMailer::Base.mail(
  content_type: "text/html",
  from: "sender@example.com",
  to: "your_email@example.com",
  subject: "This is a test",
  body: "<h2>HTML Email Test</h2><p>This is a <b>test</b>.</p>"
).deliver_now