#RailsのMailerでメール送るときに、メールをCSSでDesignしたい
##問題
- メールclientによっては、ヘッダーがスキップされてしまうので、ヘッダーでcssファイルを読み込んでもだめな場合ある
- inlineで書く必要がある
3. 例:.test{style: 'background-color: red;'}
4. これだと複雑なものを全て書くのは不可能
解決策→ 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と同じように使えるようになる。
##注意
- 不要な物も全て読み込んでしまうので、メールに必要なcss だけを、
email.css
に隔離して、読み込むべきかも - Bootstrapなどを使ってる場合は、inlineに変換されるときに、順番がなくなったり、Overwriteの関係がおかしくなったりするせいか、ちょっと予想とことなるDesignになったりする(原因はちゃんと調べてない)
画像を入れる
-
画像ファイルは、
app/assets/images
以下においておく -
heleperを作っておく
app/helpers/email_helper.rbmodule 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
-
MailerのViewsで呼ぶ(ここでは、layoutsで呼んでいるが、個々のメールのテンプレートで呼んでもOK)
app/views/layouts/mailer.haml= email_image_tag 'mail_image.png'