无法在ActionMailer中呈现内联附件

时间:2016-04-08 12:44:35

标签: ruby-on-rails ruby actionmailer

我尝试使用此处列出的方法Rails attachments inline are not shown correctly in gmail在标准的ActionMailer视图中呈现内嵌图像。

我的邮件中的代码:

attachments.inline["sample.png"] = {
  mime_type: "image/png",
  encoding: "base64",   # Including this line causes byte sequence error
  data: File.read('public/sample.png')
}

在邮件视图中:

image_tag(attachments["sample.png"].url)

给出熟悉的ruby UTF-8字节序列错误:

invalid byte sequence in UTF-8

为了解决这个问题,我尝试了以下方法:

attachments.inline["logo.png"] = {
      mime_type: "image/png",
      data: Base64.encode64(File.read('public/logo.png')) 
    }

以及

attachments.inline["logo.png"] = File.read('public/logo.png')

使用上面显示的相同image_tag语法。

这两个都解决了UTF错误,但我在视图中留下了这个荒谬的网址:

<img src="cid:5707a64ededbc_7bd83ffd648601e029875@localhostname.mail">

PNG图像有效,可在标准HTML视图中正确呈现。我使用Rails 4.2.5和Ruby 2.2.4

修改

这有效:

邮件程序:

attachments.inline["cape.png"] = {
  mime_type: "image/png",
  # encoding: "base64",
  content: Base64.encode64(File.read(Rails.root.join("public/", "cape.png")))
}

查看:

= image_tag "data:image/png;base64,#{attachments['logo.png'].read}"

然而,非常尴尬,我仍然想知道传统方法为什么不起作用。

1 个答案:

答案 0 :(得分:0)

在我的应用程序中,我只使用

attachments.inline["logo.png"] = File.read('public/logo.png')

它适用于我