Rails / HTMLメールの作成を簡単にしたい
RailsでHTMLメールの作成、どうしてますか?
基本的にCSSが使えないので、テーブルでレイアウトしてインラインCSSを使うのですが、普通に作ると結構苦痛。メンテナンスもしづらいし、似たようなデザインで別のメールをつくる時もテンプレート間でスタイルが共有できないので、ああ… となります。
なので便利なGemを使う。
Mange/roadie-rails
Gemfile
1
gem 'roadie-rails', '~> 1.0'
config/initializers/assets.rb
ruby
1
Rails.application.config.assets.precompile += %w( mailer.css )
mailers/my_mailer.rb
ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyMailer < ActionMailer::Base
include Roadie::Rails::Automatic
add_template_helper(ApplicationHelper)
default from: 'myapp.com <[email protected]>'
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
haml
1
2
3
# スタイルシートが読み込めるよ!
= stylesheet_link_tag 'mailer', media: 'all'
= yield
views/mailers/my_mailer.rb
haml
1
2
3
4
5
6
7
8
9
.mail-container
.mail-header
HTMLメールの作成
.mail-body
%h3.mail-body-title
こんな感じでCSSが使えるよ!
.mail-footer
便利だね
おまけ
最近、HerokuのアドオンのMandrillが有料になってしまったので、無料プランのある Sparkpost を使い始めました。なので、その設定を。
/config/environments/production.rb
ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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: '[email protected]' #送信元
}
end
ENV['SPARKPOST_SMTP_PASSWORD']
は heroku addons:create sparkpost:free
したら自動でHerokuの環境変数に入ってます。
heroku config
で確認できます。
あとは Sparkpost のダッシュボードにいって SPF Text Record
と DKIM Record
の値を取得して使っているDNSに設定するだけ。Amazon Route53とかだとこんな感じ。
以上です。
快適!
参考
SparkPost | Heroku Dev Center
Integrate SparkPost in your Rails app | The HungryCoder