有没有办法为Rails 3.0自动生成HTML电子邮件的文本版本?

时间:2011-05-03 01:36:27

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

我想从我的HAML / HTML模板中生成包含链接的基本文本电子邮件(strip_tags不起作用),并且可能会对内容进行粗体,列表等的一些简单文本转换。

我记得很久以前有宝石这样做了,但我找不到与Rails 3.0兼容的宝石。

这是为了避免必须创建2x电子邮件和查看文件,并且必须对内容进行一些抽象。我只是想要那里的内容,我并不在乎它看起来如何,因为非HTML电子邮件客户端现在非常罕见。

3 个答案:

答案 0 :(得分:2)

查看Markerb

它允许您在Markdown中编写邮件程序模板,并自动生成电子邮件的html和文本版本,以便作为多部分mime发送。

答案 1 :(得分:2)

premailer-rails3 gem提供此https://github.com/fphilipe/premailer-rails3

答案 2 :(得分:0)

如果你只需要一次这个功能或者你不想包含和外部依赖,你也可以这样做:

class MyMailer < ApplicationMailer
  using HtmlConverter

  def some_email
    mail(to: 'personexample.net', subject: "Nice email") do |format|
      format.html
      format.text { render plain: render_to_string('some_email.html').html_to_plain }
  end
end

我们让 html 呈现为一个字符串,然后我们去除标签。然后我们将其作为邮件的纯文本版本发送。

String 转换的代码是:

# I added a refinement to extend the String class
module HtmlConverter
  refine String do
    def html_to_plain
      preprocessed = self.gsub("<hr>", "\n--- --- --- --- --- --- --- --- --- --- --- ---\n")
      ActionController::Base.helpers.strip_tags(preprocessed)
        .split("\n").map(&:strip).join("\n") # fix indentation
        .gsub("\n\n\n", "\n") # remove extensive new lines
        .strip
    end
  end
end