【问题标题】:Rails mailer image attachment from data uri来自数据 uri 的 Rails 邮件图像附件
【发布时间】:2016-10-21 22:41:10
【问题描述】:

我以图像数据 uri、png 的形式保存了一个签名,并以字符串形式存储在我的数据库中。

发送电子邮件时,我想内联附加,但图像在 Gmail 中一直显示为无法使用。这是我的代码:

邮寄者:

attachments.inline['signature'] = {
  content: @project_addition.signature.split(',')[1],
  mime_type: 'image/png',
  encoding: 'base64'
}

查看:

<%= image_tag attachments.inline['signature'].url, width: '25%' %>

字符串的前几个字符:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABowAAAC4CA....

【问题讨论】:

  • 你从 gmail 得到什么错误
  • @CdotStrifeVII 没有错误,只是没有显示图像(只有一个中间带问号的框,这是gmail说它无法理解附件)
  • 你成功了吗?

标签: ruby-on-rails email gmail email-attachments


【解决方案1】:

如果您没有图像数据 uri,则在您的帮助程序中的方法下方放置另一个解决方案

app/helpers/email_helper.rb

  def email_data_uri(image, **options)
    code = File.open("#{Rails.root}/app/assets/images/#{image}", 'r').read
    data = Base64.strict_encode64(code)
    type = image.split('.')[-1]
    name = image.split('/')[-1]
    attachments.inline[name] = {
      content: Base64.decode64(data),
      mime_type: "image/#{type}"
    }
    image_tag attachments.inline[name].url, **options
  end

app/view/campaign_mailer

= email_data_uri 'email/livechat-logo.png', style: 'width: 34px'

添加样式选项

【讨论】:

    【解决方案2】:

    你需要调用Base64.decode64来解码base64编码的内容,而不是指定编码

    attachments.inline['signature'] = {
      content: Base64.decode64(@project_addition.signature.split(',')[1]),
      mime_type: 'image/png'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2015-04-15
      • 2014-10-06
      • 2017-08-04
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多