Railsを使用してメールに画像を埋め込む正しい方法は何ですか?
Oksanaからの回答とカスタムヘルパーアプローチを組み合わせて、以下を非常にうまく機能させました。
_app/helpers/email_helper.rb
_
_module EmailHelper
def email_image_tag(image, **options)
attachments[image] = File.read(Rails.root.join("app/assets/images/#{image}"))
image_tag attachments[image].url, **options
end
end
_
_app/mailers/base_mailer.rb
_
_class BaseMailer < ActionMailer::Base
add_template_helper(EmailHelper)
end
_
_app/mailers/my_mailer.rb
_
_class MyMailer < BaseMailer
def send_my_mail(email)
mail to: email, subject: "My Subject"
end
end
_
次に、たとえば、使用する電子メールレイアウトファイルに会社のロゴを添付する場合
_app/views/layouts/email.html.erb
_
<%= email_image_tag("company_logo.png") %>
** optionsはタグの拡張性を高めますが、Ruby> = 2でのみ動作します。この作業をRuby <2で行うには、重要なWordオプションを処理する古い方法を使用します。
レール5
メールメソッドで、画像を指すインライン添付ファイルを追加します。
class ConfirmationMailer < ActionMailer::Base
def confirmation_email
attachments.inline["logo.png"] = File.read("#{Rails.root}/app/assets/images/logo.png")
mail(to: email, subject: 'test subject')
end
end
次に、メールのHTMLビューでimage_tag
添付URL付き:
<%= image_tag(attachments['logo.png'].url) %>
Oksanaとtdubsの回答に追加する
Tdubsモジュールはデスクトップ上で動作しますが、モバイルGmailクライアントの場合、画像は添付ファイルとして表示されます。これを修正するには、
app/helpers/email_helper.rb
module EmailHelper
def email_image_tag(image, **options)
attachments[image] = {
:data => File.read(Rails.root.join("app/assets/images/emails/#{image}")),
:mime_type => "image/png",
:encoding => "base64"
}
image_tag attachments[image].url, **options
end
end
残りについては、tdubsの回答に従ってください。
多くの調査の後、メールに画像を埋め込む非常にクリーンな方法を見つけました。 production.rb
およびdevelopment.rb
に次の行を追加するだけです
config.action_mailer.asset_Host = 'YOUR Host URL'
次のコードを使用して、ビューに画像を埋め込みます。
<%= image_tag('My Web Site Logo.png') %>
注:YOURホストURLおよびMy Web Site Logo.png上記のコード。
Action Mailerの基本的な使用方法の詳細については、 ActionMailer :: Base を参照してください。
ここから貼り付けたコピー
インライン添付
ファイルを他のHTMLとインラインで表示するように指定することもできます。これは、会社のロゴや写真を表示する場合に便利です。
class Notifier < ApplicationMailer
def welcome(recipient)
attachments.inline['photo.png'] = File.read('path/to/photo.png')
mail(to: recipient, subject: "Here is what we look like")
end
end
ビューで画像を参照するには、welcome.html.erbファイルを作成し、表示する添付ファイルを渡すimage_tagを呼び出してから、添付ファイルのurlを呼び出して、画像の相対コンテンツIDパスを取得します。ソース:
<h1>Please Don't Cringe</h1>
<%= image_tag attachments['photo.png'].url -%>
アクションビューのimage_tagメソッドを使用しているため、必要な他のオプションを渡すことができます。
<h1>Please Don't Cringe</h1>
<%= image_tag attachments['photo.png'].url, alt: 'Our Photo', class: 'photo' -%>
Railsについてはあまり知りませんが、C#で電子メールを作成し、Google APIを介してユーザーの受信トレイに挿入するプロジェクトに取り組んできました。電子メールを作成するには、電子メール文字列をゼロから生成する必要がありました。メールのマルチパートを有効にすると、画像バイトはbase64エンコーディングを使用してマルチパートセクションに含まれます。
TMailおよびRubyMailパッケージをチェックアウトして、これらのアクションがサポートされているかどうかを確認することをお勧めします。