LoginSignup
5
1

More than 3 years have passed since last update.

[Rails5]Deviseの認証メールで画像が表示されないからカスタムしてみた。

Last updated at Posted at 2019-12-19

初めに

認証メールに画像やアイコンを載せたく、試みようとしたらDeviseの認証メールをカスタマイズしないといけなかったので、その経緯を記してみます( ..)φメモメモ

カスタマイズせずに試みたコード

view

<!DOCTYPE html>
<html>
  <%= stylesheet_link_tag 'mailer', media: 'all', 'data-turbolinks-track': 'reload' %>
    <p><%= @email %> ○○○へようこそ!</p>
    <p>メールアドレスの確認をした後にご利用頂けます。</p>
      <%= image_tag 'mail.png' %>
config/application.rb
#ActionMailerのviewに画像を追加する為に
config.action_mailer.asset_host = 'https://'

表示されない、、、

何が原因か探る

・画像を他のviewで表示できたから画像自体に問題ない。
・受け取る側のメール設定に問題ない。
・受け取る側のデバイスに問題はない。
・バイナリーモードになっていて問題ない。
・configに問題ない。

原因

参考1参考2
普通にimage_tagを使っても駄目で、Devise Mailerをカスタマイズしないといけないことが原因だった。

解決

app/mailers/devise_custom_mailer.rb
class DeviseCustomMailer < Devise::Mailer
  before_action :add_inline_attachment!

  private

  def add_inline_attachment!
    pngs = ['mail.png']

    pngs.each do |png|
      attachments.inline[png] = File.read("#{Rails.root}/app/assets/images/mailer/" + png)
    end
  end
end
config/initializers/devise.rb
#追加
config.mailer = 'DeviseCustomMailer'
/app/views/devise/mailer/confirmation_instructions.html.erb
CTYPE html>
<html>
  <%= stylesheet_link_tag    'mailer', media: 'all', 'data-turbolinks-track': 'reload' %>
    <p><%= @email %> ○○○へようこそ!</p>
    <p>メールアドレスの確認をした後にご利用頂けます。</p>
     <%= image_tag attachments['mail.png'].url %>   

これで認証メールに画像を表示させる事ができるようになりました。

5
1
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
5
1