如何在ActiveMailer中将base64图像作为嵌入式附件添加到邮件中?

时间:2019-01-29 18:50:33

标签: ruby-on-rails actionmailer

我正在尝试使用Active Mailer将base64图像作为Ruby内嵌附件发送到Rails上,但是却无法正常工作。

我找到了添加附件的方法:

def inline_base64(name, content)
    attachments.inline[name] =
    {
      mime_type: 'image/png',
      content: content,
      encoding: "base64"
    }
  end

我这样调用方法

inline_base64('first_client.png', client[:image64])

其中第一个参数仅是名称,另一个是作为字符串的base64图像

在erb文件中,我尝试插入如下图像:

<%= image_tag attachments['first_client.png'].url, size:'90' %>

但是当我收到邮件时,它只显示损坏的图像:

image broken

有人知道我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

Base64是文件中数据的编码表示形式。

  

请注意Base64和DataURL之间的区别。

     

DataURL字符串以data:image/png;base64,或类似的字符串开头。如果是这种情况,那么您的 base 64编码数据就是,之后的所有内容:base_64 = content.split(',')[1]

此base 64数据只是读取文件并将其数据编码为base 64的结果:

content = Base64.encode64(File.read('your/path.png'))

您只需要撤消编码即可获得与函数File.read将返回的结果完全相同的结果:

data = Base64.decode64(content)

您的方法将结束,如下所示:

def inline_base64(name, content)
  attachments.inline[name] = Base64.decode64(content)
end

如果您仍然遇到损坏的图像,请检查您的content是否以DataURL字符串开头并将其删除。