在Rails中将外部CSS转换为邮件的内联CSS

时间:2011-05-24 16:24:51

标签: ruby-on-rails css ruby email gmail

我正在尝试创建一个应用程序,该应用程序将发送风格繁重的电子邮件,并且要求客户除了Google的Gmail之外还要工作。我研究了这个问题,看起来Gmail从外部文件中删除了CSS,或者嵌套在'style'标签中的CSS。将样式从外部文件移动到内联是否存在简单方法?

需要采取的措施:

<style>
.wide { width: 100px; }
.cell { display: block; }
</style>
<span class="wide cell">Sample</span>

并将其转换为:

<div class="wide cell" style="width: 100px; display: block;">Sample</div>

谢谢!

3 个答案:

答案 0 :(得分:38)

以下是您可以查看的几款宝石:

我在撰写此答案时没有获胜者,但预制商似乎是最新的。

答案 1 :(得分:6)

添加了premailer

def premailer(message)
  message.text_part.body = Premailer.new(message.text_part.body.to_s, with_html_string: true).to_plain_text
  message.html_part.body = Premailer.new(message.html_part.body.to_s, with_html_string: true).to_inline_css

  return message
end

def welcome(user)
  @user = user

  message = mail ...
end

答案 2 :(得分:4)

你的推理只有一个问题......不支持许多样式,甚至内联。

以下是what is supported in email

的参考资料

在您的示例中,您使用了Outlook 07 +

不支持的display:标记

我的公司每天会发送数千封电子邮件,而且我经常会帮助他们建立这些电子邮件。在实践中,内联样式可以工作,但它并不像插入所有内容那么简单,它会起作用。您必须非常小心使用的内容以及使用方法。我已经开始使用纯粹的HTML中的所有内容,并使用表格进行布局。这基本上是我发现在几乎100%的时间内完成工作的唯一方法。

如果您正在将此功能构建到一个可以大量使用的应用中,我还强烈建议您通过其API在Email on Acid中构建。虽然您可以编写非常好的高质量输出,但毫无疑问,Microsoft会找到一些方法来使您的有效代码无效。关于Acid的电子邮件将使用Microsoft当时使用的任何疯狂信息来显示您的电子邮件是否有效。对于那些认真发送大量电子邮件的人来说,这是纯粹的天才和必需的用途。不,我不为公司工作....