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

有谁能指出我的问题?

我在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) 

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

 -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") 

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

我究竟做错了什么?

毕竟我找到了一个解决方案:你需要做的就是设置附件的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" } 

这对我有用。

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

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

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

您也可以参考https://stackoverflow.com/a/25810153/2041318 ,在那里您可以找到邮件内嵌图像的好帮手方法。

值得一提的是,当我发现这个问题时,我的问题是相同的,但却是一个不同的根本原因。

如果您正在运行Rails 4并且在Gmail中显示图像时出现问题(但不在Outlook365或OSX邮件程序客户端中),请确保您没有尝试显示.svg文件。 Gmail不支持这些日期我写这篇文章你需要一个.jpg.png后备版本。