Redmineでもletter_openerを使って調整したメールを確認してみよう。


これはなに?

  • Redmineでは、メール本文のヘッダやフッタのカスタマイズができます
  • このカスタマイズが問題ないかどうか、letter_openerというgemを使って確認する方法をご紹介します

どういう人向けの記事?

このgemは、Railsでは非常に利用されているgemです。
どちらかというとRubyやRails専門ではないけれど、Redmineを運用したり、必要に応じてカスタマイズしたい人向けになります。

  • developmentモード で利用が前提のgemのため、開発環境で検証する方法を理解している方向けになります
    • カスタマイズの際に、まずdevelopmentモードで機能を追加調整する方針をとっている方
    • その上で本番に適用する、という流れを実施できる方

どういうシーンに使うと便利?

  • Redmineでメール部分のカスタマイズをしている方向け
  • 管理画面からのヘッダ / フッタ調整だけでなく、内部のメール用のテンプレートをカスタマイズしたい場合
  • プラグインでメールをカスタマイズしたり通知を追加したりする場合

想定通りの文言が当てはまってメールが生成されているかを確認しやすくなります。

やらないこと

letter_openerの設定

公式のREADMEに記載がある通り進めればOKです。
RedmineもRailsアプリケーションなので、Gemfileとdevelopment.rbの設定のみで利用できるようになります。

まずはgemの追加

  • Redmineのソースをダウンロード(clone) します
  • Redmine直下のGemfileに、以下を追記します
Gemfile
gem "letter_opener", :group => :development

追加したら、この追加gemを取得するため、bundle install を実行します。すでにRedmineに必要なgemが入っており、あとからその環境に追加する場合でも、同じくbundle install (bundle) であれば、追加で入ります。

# オプション無しだとdevelopmentモードのgemを取得します
bundle install

設定ファイルの調整

Redmine公式のメール設定を確認

Redmineの公式サイトでの、メール送信設定は以下に記載があります。

基本は、config/configuration.yml.example を元に config/configuration.yml ファイルを作成し、設定をしていきます。

developmentモードでも実際にsmtpを使ってメール送信を試すことができますが、デフォルトでは送信はされず、ログに送信メッセージが出力されます。

letter_openerの設定を追加する

letter_openerのREADMEに沿って設定する場合

developmentモードではメール送信をせず、letter_openerで確認する場合は、config/environments/development.rb に追記します。

config/environments/development.rb
config.action_mailer.delivery_method = :letter_opener
config.action_mailer.perform_deliveries = true

Redmineにも config/environments/development.rb があるので、上記の通りの追記で利用が可能です。

Redmineのconfig/configuration.ymlを使う場合

Redmine公式のメール設定にも記載がある通り、こちらでも送信設定を調整することができます。
delivery_methodをletter_openerに設定となります。

config/configuration.yml
development:
  email_delivery:
    delivery_method: :letter_opener
    perform_deliveries: true

メールを送って確認してみる

developmentモードでチケットを作成、終了してみた例です。

  • メール送信対象のものは、tmp/letter_opener/ 以下に書き出されます
  • 実際の送信内容と同じく、メールのテンプレートに変数が展開された形で書き出しになります

カスタマイズしたメールの確認

Redmineに慣れていない場合は、ユーザの方が直にメールに返信してしまう、ということもありがちです。

運用の初めのころは、そういったことも配慮して「このメールには返信しないでくださいね!」的なメッセージを追加していました。

Redmineの管理画面では、メール本文の上部と下部(ヘッダ / フッタ)に簡単にメッセージを追加できますので、試しに設定して、想定通りになっているか確認してみます。

Redmineの管理画面

結果はこのような感じ。

簡単ですが、十分に確認ができますね!

letter_opener_webも使う場合

letter_openerは、送信メールをファイルに書き出してくれるgemです。

さて、letter_openerはファイルシステムに書き出すため、ローカル開発環境やターミナルでの確認はできますが、開発環境がサーバにある場合は、ちょっと確認がしづらいですね。

こちらもRails開発ではポピュラーですが、letter_opener_webというgemを追加すると、Railsアプリケーションに同居する形で、ブラウザを通してletter_openerで書き出したメールを確認することができます。

追加するものは?

Gemfileに以下を追加します。

# developmentモードでのみ利用します
group :development do
  gem 'letter_opener_web', '~> 1.0'
end
  • gem "letter_opener" 単体を先に追加していれば、置き換えをします
  • bundle installの際に、依存関係でletter_openerも入ります
  • 上記の通り、letter_openerの設定が必要です
    • delivery_method = :letter_opener

ルーティングを追加

letter_opener_webのREADMEに記載のあるとおり、ルーティングを追加します。

config/routes.rb

# 設定例
redmine $ svn diff config/routes.rb
Index: config/routes.rb
===================================================================
--- config/routes.rb    (revision 19511)
+++ config/routes.rb    (working copy)
@@ -374,4 +374,6 @@
       end
     end
   end
+
+  mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
 end
  • mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? を追加して再起動します

ブラウザから確認してみる

ふたたびメール送信対象の操作をしてみます。
こちらはチケット変更の例。

ブラウザでアクセスすると、新しいメールから降順に一覧が表示されます。
また、右側には最新のメールが表示されます。

キャプチャの左隅の、tmp/letter_opener/ 側の件数と一致します。
letter_opener_webの画面から、不要になったメールを削除することも可能です。

まとめ

以上、簡単な例でした。

一度通知が出てしまうと、相手のもとに届いてしまったメールは取り消せません。必要以上の情報が盛り込まれていないか?宛先は適切か?など、心配なことがありますね。
Redmineに限らず、慎重さが必要なメールに関しては、こういったツールでチェックができるというのは、とても助かりますね。

実運用の際の、なにかにお役に立てば幸いです。