内联中的Rails附件未在gmail中正确显示

rom*_*man 6 ruby gmail ruby-on-rails actionmailer

有谁能指出我的问题?

我在rails 3.1应用程序邮件程序中使用内联附件.该信还包含存储在amazon w3服务器上的图像.

问题是gmail没有正确显示字母.我在信中有内联附件.但Gmail会将这些文件显示为附加文件.这封信还包含一个附加的html页面,其中包含字母本身.所有gmail显示都是一组符号,我想这是一个附加图像的base64版本.

查看截图.

由于缺乏必要的评级,我无法发布图片,所以我在这里发布.

这是我的邮件中的代码:

attachments.inline['blank'] = File.read("#{Rails.root.to_s + '/app/assets/images/blank_500x500.png'}")
attachments.inline['discount-deal-triangle'] = File.read("#{Rails.root.to_s + '/app/assets/images/discount-deal-triangle.png'}")
mail(:to => @subscriber.email, :subject => subject)
Run Code Online (Sandbox Code Playgroud)

以下是视图文件中的代码:

-if @image_url
  = image_tag( attachments['offer_image'].url, :id => 'offer_image', :width => "320", :height => "320")
-elsif @offer.image.nil?
  = image_tag( attachments['blank'].url, :id => 'offer_image', :width => "320", :height => "320")
Run Code Online (Sandbox Code Playgroud)

我省略了细节以使其更简单.

我究竟做错了什么?

rom*_*man 12

毕竟我找到了一个解决方案:您需要做的就是设置附件的mime类型和编码.

attachments.inline['blank'] = {
                                :data => File.read("#{Rails.root.to_s + '/app/assets/images/blank_500x500.png'}"),
                                :mime_type => "image/png",
                                :encoding => "base64"
                              }
attachments.inline['discount-deal-triangle'] = {
                                :data => File.read("#{Rails.root.to_s + '/app/assets/images/discount-deal-triangle.png'}"),
                                :mime_type => "image/png",
                                :encoding => "base64"
                              }
Run Code Online (Sandbox Code Playgroud)

这对我有用.


jma*_*eli 5

在内联数组中使用文件扩展名.例:

attachments.inline['blank.png'] = 
  File.read(Rails.root.join('app', 'assets', 'images', 'blank_500x500.png')
Run Code Online (Sandbox Code Playgroud)

这样Rails会猜测文件mime_typeencoding.至少Rails 4.2会这样做.

您也可以参考/sf/answers/1806710741/,在那里您可以找到邮件内嵌图像的好帮手方法.