LoginSignup
13
12

More than 5 years have passed since last update.

railsのmailerでcssファイルを使う&画像も入れる

Posted at

RailsのMailerでメール送るときに、メールをCSSでDesignしたい

問題

  1. メールclientによっては、ヘッダーがスキップされてしまうので、ヘッダーでcssファイルを読み込んでもだめな場合ある
  2. inlineで書く必要がある
    1. 例:.test{style: 'background-color: red;'}
    2. これだと複雑なものを全て書くのは不可能

解決策→ premailer-rails

このGemでは、Headerに書いたcssファイルをinline cssに変換してくれるので、上記の問題を解決することができる。

Gemfile
gem 'nokogiri'
gem 'premailer-rails'
app/views/layouts/mailer.haml
%head
  = stylesheet_link_tag 'application', media: 'all'
%body
  ...

これで、普通のViewsと同じように使えるようになる。

注意

  1. 不要な物も全て読み込んでしまうので、メールに必要なcss だけを、email.cssに隔離して、読み込むべきかも
  2. Bootstrapなどを使ってる場合は、inlineに変換されるときに、順番がなくなったり、Overwriteの関係がおかしくなったりするせいか、ちょっと予想とことなるDesignになったりする(原因はちゃんと調べてない)

画像を入れる

  1. 画像ファイルは、app/assets/images以下においておく

  2. heleperを作っておく

    app/helpers/email_helper.rb
    module EmailHelper
      def email_image_tag(image, options = {})
        image_tag email_image_url(image), options
      end
    
      def email_image_url(image)
        attachments[image] = File.read     Rails.root.join("app/assets/images/#{image}")
        attachments[image].url
      end
    end
    
  3. MailerのViewsで呼ぶ(ここでは、layoutsで呼んでいるが、個々のメールのテンプレートで呼んでもOK)

    app/views/layouts/mailer.haml
    = email_image_tag 'mail_image.png'
    

おまけ:メーラーのテストに関してはこちら

rails でmailにimageを入れてるときのLinkのrspecのテスト

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12