Giter Club home page Giter Club logo

inline_styles_mailer's Introduction

Update for Rails 5.1+

I've started to use the premailer gem for Rails > 5.0. I'd welcome patches to keep this gem going.

Inline Styles Mailer Build Status

Using Jack Danger's excellent Inline Styles gem is even easier if you're using Rails 3.1+ and this gem.

The Inline Styles gem helps you embed CSS styles into your markup so that you can send pretty HTML emails that won't get butchered by email clients that strip out CSS. Or, more precisely, will help reduce the amount of butchering (even with inline CSS some styles, like background images, are often cut out).

This gem stands on the shoulders of the inline_styles and sass-rails gem, merely adding some code to make it more convenient to use.

What do you mean, "inline style"?

Let's say you have a mail template like this:

<html>
  <body>
    <p>Hello World</p>
  </body>
</html>

And a CSS file like this:

p {
  color: red;
}

Then this gem will mash that all up into:

<html>
  <body>
    <p style="color: red;">Hello World</p>
  </body>
</html>

So you can keep your templates clean and take advantage of CSS preprocessing goodness if you want without compromising the portability of your HTML in various email clients.

MailChimp have a nice article: How To Code HTML Emails.

Installation

If you're using Bundler:

source 'http://rubygems.org'
gem 'inline_styles_mailer'

Usage

If you keep things simple, then it's just one line:

class FooMailer < ActionMailer::Base
  include InlineStylesMailer

  def foo(email)
    mail(:to => email, :subject => "Foo foo!")
  end

end

If you have a CSS file app/assets/stylesheets/_foo_mailer* (where * can be .css, .css.scss or .css.sass) then it will get automatically applied to the mail using the inline_styles gem. That name (_foo_mailer) is based on your mailer class name, e.g. FooMailer. If you have more than one file matching that pattern then it will use them all.

It will use one of three preprocessing methods based on the filename:

  • .scss
  • .sass
  • anything else (e.g. .css) no preprocessing at all

Want to use a different css file? Declare use_stylesheet:

class FooMailer < ActionMailer::Base
  include InlineStylesMailer
  use_stylesheet '_bar.css.sass'
  ...
end

You can use an array of stylesheets if you like. Don't keep your stylesheets in app/assets/stylesheets? Declare stylesheet_path:

class FooMailer < ActionMailer::Base
  include InlineStylesMailer
  stylesheet_path 'public/stylesheets'
  ...
end

Upgrading to Version 1.0

We decided to bump up the major version because of a fix (5d0b6f4) we made to the way the template was found. We were incorrectly assuming that all mail templates were only nested one deep in app/views but that's not always the case. It now works correctly but you might have worked around this bug (issue #8) by moving your templates. You don't need to do that any more.

What versions of Rails does this work with?

We run tests using Rails 4.2.6, 5.0.0.beta3, 5.1.6 and 5.2

Version Working?
3.0 No *
3.1 Yes
3.2 Yes
4.0 Yes
4.1 Yes
4.2 Yes
5.0 Yes
5.1 Yes
5.2 Yes

* It relies on the asset pipeline so I'd be surprised if it works. Not tested.

** I'm recommending using the premailer gem for Rails > 5.0.

What about Ruby?

Anything later than Ruby 1.9.2 should be fine. We test using Ruby 2.0.0, 2.1.8, 2.2.4and2.3.0`.

1.9 Support

We don't test with Ruby 1.9 because there is a dependency on the mime-types-data gem for which the latest version requires Ruby 2.0 or later. That doesn't mean you can't use Ruby 1.9.3 but you'll need to make sure you're using a version of mime-types-data less than 3.

Development

Questions or problems? Please post them on the issue tracker. You can contribute changes by forking the project and submitting a pull request. You can ensure the tests passing by running bundle and rake.

The tests also run on Travis CI.

This gem was created by Bill Horsman and is under the MIT License.

inline_styles_mailer's People

Contributors

afomera avatar billhorsman avatar eccentricyan avatar licatajustin avatar nielskschjoedt avatar ssemakov avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.