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

时间:2011-12-02 13:20:50

标签: ruby-on-rails ruby gmail actionmailer

有人能指出我的问题吗?

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

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

请参阅屏幕截图。

由于缺少必要的评分,我无法发布图片,因此我发布了here

以下是我的邮件中的代码:

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

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

我做错了什么?

4 个答案:

答案 0 :(得分:11)

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

这对我有用。

答案 1 :(得分:5)

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

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,你可以在那里找到邮件内嵌图像的好帮手方法。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这实际上取决于图像的大小,它被认为是适当的附件(而不是嵌入式附件),例如以gmail生成链接和缩略图以下载。

>

我所做的就是@roman推荐的所有内容,并且调整了徽标的大小以使其大小小于10kb 。结果是没有附件的干净电子邮件,邮件中显示了我的徽标。