Rails / HTMLメールの作成を簡単にしたい

RailsでHTMLメールの作成、どうしてますか?
基本的にCSSが使えないので、テーブルでレイアウトしてインラインCSSを使うのですが、普通に作ると結構苦痛。メンテナンスもしづらいし、似たようなデザインで別のメールをつくる時もテンプレート間でスタイルが共有できないので、ああ… となります。

なので便利なGemを使う。
Mange/roadie-rails

Gemfile

gem 'roadie-rails', '~> 1.0'

  
config/initializers/assets.rb

Rails.application.config.assets.precompile += %w( mailer.css )

  
mailers/my_mailer.rb

class MyMailer < ActionMailer::Base

  include Roadie::Rails::Automatic
  add_template_helper(ApplicationHelper)

  default from: 'myapp.com <info@myapp.com>'
  layout 'mailer'

  def notification(message, user)
    @message = message
    @user = user
    mail to: @user, subject: "メッセージを受け取りました",
         template_path: "mailers/my_mailer", template_name: "notification"
  end
end

  
views/layouts/mailer.html.haml

# スタイルシートが読み込めるよ!
= stylesheet_link_tag 'mailer', media: 'all'
= yield

  
views/mailers/my_mailer.rb

.mail-container
  .mail-header
    HTMLメールの作成
  .mail-body
    %h3.mail-body-title
      こんな感じでCSSが使えるよ!

.mail-footer
  便利だね

  

おまけ

最近、HerokuのアドオンのMandrillが有料になってしまったので、無料プランのある Sparkpost を使い始めました。なので、その設定を。

/config/environments/production.rb

Rails.application.configure do
  # SparkPost
  config.action_mailer.default_url_options = { :host => 'myapp.com' }

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    user_name: 'SMTP_Injection',
    password: ENV['SPARKPOST_SMTP_PASSWORD'],
    address: 'smtp.sparkpostmail.com',
    port: 587,
    enable_starttls_auto: true,
    format: :html,
    from: 'info@myapp.com' #送信元
  }
end

ENV['SPARKPOST_SMTP_PASSWORD']heroku addons:create sparkpost:free したら自動でHerokuの環境変数に入ってます。
heroku config で確認できます。

あとは Sparkpost のダッシュボードにいって SPF Text RecordDKIM Record の値を取得して使っているDNSに設定するだけ。Amazon Route53とかだとこんな感じ。

Screen Shot 2015-11-05 at 9.39.30 AM

以上です。
快適!

  

参考

SparkPost | Heroku Dev Center
Integrate SparkPost in your Rails app | The HungryCoder

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた