使用Rails将图像嵌入电子邮件的正确方法是什么?
答案 0 :(得分:60)
我将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") %>
注意**选项使标记更具可扩展性,但它只能在ruby&gt; = 2中使用。为了使这项工作在ruby&lt; 2您将不得不使用旧方法处理关键字选项。
答案 1 :(得分:29)
RAILS 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
附件网址:
<%= image_tag(attachments['logo.png'].url) %>
答案 2 :(得分:21)
添加到Oksana和tdubs&#39;答案
模块tdubs在桌面上编写了作品,但对于移动gmail客户端,图像显示为附件。要解决此问题,请执行
应用程序/助手/ 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的回答。
答案 3 :(得分:14)
经过大量研究后,我发现将图像嵌入电子邮件的方式非常简洁。
只需在production.rb
和development.rb
config.action_mailer.asset_host = 'YOUR HOST URL'
在您的视图中使用以下代码嵌入图像。
<%= image_tag('My Web Site Logo.png') %>
注意:请务必更新您的主机网址和我的网站Logo.png 上面的代码。
有关Action Mailer使用的基本详情,请参阅ActionMailer::Base。
答案 4 :(得分:5)
从此处粘贴的复制件
内联附件
您还可以指定文件应与其他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 -%>
由于我们正在使用Action View的image_tag方法,您可以传入您想要的任何其他选项:
<h1>Please Don't Cringe</h1>
<%= image_tag attachments['photo.png'].url, alt: 'Our Photo', class: 'photo' -%>
答案 5 :(得分:0)
我对rails知之甚少,但我曾在C#中开展过创建电子邮件的项目,然后通过Google API将它们插入到用户收件箱中。要创建电子邮件,我必须从头开始生成电子邮件字符串。如果为电子邮件启用multipart,则图像字节将使用base64编码包含在多部分中。
您可能需要查看TMail和RubyMail软件包,看看它们是否支持这些操作。